Wie kann man ein Array neu indizieren?

Lesezeit: 5 Minuten

Wie kann man ein Array neu indizieren
stergosz

Mein Array sieht so aus:

array(
  0 => 'val',
  2 => 'val',
  3 => 'val',
  5 => 'val',
  7 => 'val'
);

Wie kann ich die Tasten zurücksetzen, damit es wie geht 0, 1, 2, 3, 4?

  • Verwenden Sie eine Foreach-Schleife, und ein fehlender Index ist kein Problem. Ich verwende eine for-Schleife auf einem Array und der fehlende Index verursacht ein Problem.

    – Kent Tran

    29. Juli 2019 um 3:07 Uhr

Verwenden array_values:

$reindexed_array = array_values($old_array);

  • Array-Werte sind zwar gültig, aber nicht das, was ich empfehlen würde. Intern ruft es den Array-Konstruktor auf und gibt ein neues Array zurück. Die Verwendung von sort ist daher (geringfügig) schneller und auch kürzer zu schreiben

    – Elias Van Ootegem

    27. Juni 2012 um 11:12 Uhr

  • Ich brauche kein anderes Array zu verwenden. Ich einfach array_values() das aktuelle

    – stergosz

    27. Juni 2012 um 11:13 Uhr

  • Elias, ein einfacher Benchmark wird dir zeigen, dass Sortieren nie schneller ist. Es ist sehr langsam für große Arrays und der Speicherunterschied ist minimal für kleine. Ich sehe keinen Grund, sort zu verwenden (die möglicherweise auch unerwünschte Nebenwirkungen haben).

    – Emil Vikström

    27. Juni 2012 um 11:25 Uhr

  • Wir alle müssen oft neue Telefone kaufen, weil sich Programmierer nicht darum kümmern, Speicherplatz zu sparen. Warum wird diese Antwort so häufiger gewählt als die von @Rawkode unten?

    – Rodrigo

    31. Oktober 2018 um 20:44 Uhr

  • @Rodrigo Weil für die meisten PHP-Entwickler CPU-Kerne teurer sind als Speicher (wir haben auf allen unseren FPM-Servern Gigabyte ungenutzten RAM). Und die meisten von uns betreiben Webentwicklung, bei der die Reaktionszeit wichtig ist. Meine Antwort ist schneller und verbraucht weniger CPU. Meine Antwort ist auch eleganter, weil sie die ursprüngliche Frage ohne andere Nebenwirkungen beantwortet. Wenn Sie damit nicht einverstanden sind, ist das in Ordnung, aber Ihr Gerede über Telefone scheint sehr unfair zu sein, da ich einer von denen bin, die sich um Leistung kümmern. Ich sage nur, dass das Erstellen eines neuen Arrays in O(n)-Zeit performanter ist als das Sortieren in O(n log n)-Zeit.

    – Emil Vikström

    1. November 2018 um 13:25 Uhr


array_splice($old_array, 0, 0);

Es wird kein Array sortiert und kein zweites Array erstellt

Wie kann man ein Array neu indizieren
Rawkode

Durch die Nutzung sort($array);

Siehe PHP-Dokumentation Hier.

Ich würde empfehlen sort über array_values da es kein zweites Array erstellt. Mit dem folgenden Code haben Sie jetzt zwei Arrays, die Platz belegen: $reindexed_array und $old_array. Nicht notwendig.

$reindexed_array = array_values($old_array);

  • Wieso ist meine Antwort falsch? sort wird das Array neu eingeben und sortieren, wie er es verlangt hat.

    – Rawcode

    27. Juni 2012 um 11:12 Uhr

  • aber ich muss kein neues Array für array_values ​​verwenden, da ich $array = array_values($array) tun kann

    – stergosz

    27. Juni 2012 um 11:19 Uhr

  • sort ist viel langsamer als array_values. Die zeitliche Komplexität von array_values ist O(n) während sort ist im besten Fall O(n log n). Ein einfacher Benchmark zeigt Ihnen, dass array_values ​​in allen Fällen schneller ist als sort, insbesondere bei größeren Arrays (das Sortieren von einer Million Einträgen dauerte auf meinem Computer über eine Sekunde, während array_values ​​zehnmal schneller war). Was ist auch, wenn fxuser die Werte nicht sortieren möchte?

    – Emil Vikström

    27. Juni 2012 um 11:22 Uhr

  • Jawohl, sort kann gültig sein, ist aber viel langsamer, insbesondere für große Arrays (solche, bei denen der Speicher eine Rolle spielt).

    – Emil Vikström

    27. Juni 2012 um 11:39 Uhr

  • Diese Antwort ist immer dann falsch, wenn die Werte nicht bereits in aufsteigender Reihenfolge sind. Es sollte nicht 11 positive Stimmen haben – es ist nur aufgrund des in der Frage geposteten Szenarios richtig.

    – mickmackusa

    18. Juli 2019 um 8:47 Uhr

Ab PHP7.4 können Sie ohne Funktionsaufruf neu indizieren, indem Sie die Werte mit dem Splat-Operator in ein Array entpacken. Betrachten Sie dies als “Umpacken”.

Code: (Demo)

$array = array(
  0 => 'val',
  2 => 'val',
  3 => 'val',
  5 => 'val',
  7 => 'val'
);

$array = [...$array];

var_export($array);

Ausgabe:

array (
  0 => 'val',
  1 => 'val',
  2 => 'val',
  3 => 'val',
  4 => 'val',
)

Hinweis: Diese Technik wird NICHT Arbeiten Sie mit assoziativen Schlüsseln (der Splat-Operator verschluckt sich an diesen). Nicht-numerische Demo

Der Bruch wird als Unfähigkeit zum Auspacken gemeldet Schnur Schlüssel, aber es wäre genauer zu sagen, dass die Schlüssel alle numerisch sein müssen. Ganzzahl als String-Demo und Float-Demo

1646262247 746 Wie kann man ein Array neu indizieren
fvlgnn

array_splice($jam_array, 0, count($jam_array));

Um ein Array mit fehlenden Zwischenindizes zu sortieren, mit Anzahl Die Bestellung ist sicherer. Damit 0 ist der erste Index und count($jam_array) oder sizeof($jam_array) gibt die Dezimalstelle des Arrays zurück, nämlich den letzten Index.

Wie kann man ein Array neu indizieren
Magnus

Es sei darauf hingewiesen, dass das Array in der Frage ein ganz besonderer Fall ist, in dem alle Werte gleich sind und die Schlüssel bereits in aufsteigender Reihenfolge sind. Wenn Sie ein Array mit unterschiedlichen Werten und Schlüsseln in beliebiger Reihenfolge haben und es nach Schlüssel sortieren und die Schlüssel neu indizieren möchten, werden die vorhandenen Antworten nicht das tun, was Sie erwarten.

Wenn Sie zum Beispiel so etwas haben:

[
    7 => 'foo',
    0 => 'bar',
    2 => 42
];

und du willst damit enden:

[
    0 => 'bar',
    1 => 42,
    2 => 'foo',
]

Sie können nicht einfach verwenden array_values(), array_splice() oder sort()weil Sie am Ende mit

[
    0 => 'foo',
    1 => 'bar',
    2 => 42,
]

Stattdessen müssen Sie das Array zuerst basierend auf den Schlüsseln sortieren, indem Sie verwenden ksort()und dann Schlüssel neu indizieren mit array_values():

$arr = [
    7 => 'foo',
    0 => 'bar',
    2 => 42
];

ksort($arr, SORT_NUMERIC);
$arr = array_values($arr);

Ergebnis:

[
    0 => 'bar',
    1 => 42,
    2 => 'foo',
]

1646262248 54 Wie kann man ein Array neu indizieren
infomasud

Der einfache und einfache Weg ist:

$new_numerical_indexed_array = array_values($old_array);

unterstützt von PHP 4, PHP 5, PHP 7, PHP 8, wie Sie sehen können Hier

917060cookie-checkWie kann man ein Array neu indizieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy