PHP ordnet nach dem Löschen des assoziativen Arrays neu

WBOY
Freigeben: 2023-05-06 13:16:07
Original
594 Leute haben es durchsucht

Bei der Durchführung von PHP-Array-Operationen müssen wir das Array häufig hinzufügen, löschen und ändern. Das Löschen von Array-Elementen kann dazu führen, dass sich die interne Reihenfolge des Arrays ändert. Wenn Sie zum Durchlaufen des Arrays eine foreach-Schleife verwenden, kann dies zu unerwarteten Ergebnissen führen. In diesem Artikel wird eine Methode vorgestellt, um Durchlaufprobleme zu vermeiden, die durch das Löschen von Elementen verursacht werden, indem assoziative Array-Elemente gelöscht und anschließend neu angeordnet werden.

Werfen wir zunächst einen Blick auf die Array-Typen in PHP.

In PHP gibt es zwei Arten von Arrays: indizierte Arrays und assoziative Arrays. Indizierte Arrays sind ganzzahlig indizierte Arrays beginnend bei 0, während assoziative Arrays Zeichenfolgen als Schlüssel verwenden. Das Folgende ist ein Beispiel für ein assoziatives Array:

$students = [
    'Tom' => 75,
    'Jerry' => 82,
    'Alice' => 95
];
Nach dem Login kopieren

In diesem Array hat jedes Element einen Zeichenfolgenschlüssel und einen entsprechenden Wert.

Jetzt überlegen wir, wie man ein Element aus dem assoziativen Array $students löscht. Dies kann mit der Funktion unset() erreicht werden: $students 中删除一个元素。使用 unset() 函数就可以实现:

unset($students['Jerry']);
Nach dem Login kopieren

这样就可以把 $students 数组中键为 'Jerry' 的元素删除了。

但是,这样删除元素之后,数组中的内部顺序就改变了,这可能会导致我们在遍历数组时出现问题。例如:

foreach ($students as $name => $score) {
    echo "$name's score is $score\n";
}
Nach dem Login kopieren

在执行这段代码之后,我们可能会得到这样的结果:

Tom's score is 75
Alice's score is 95
Nach dem Login kopieren

'Jerry' 的成绩并没有输出,因为它已经被删除了。这个问题的根本原因是,我们使用 foreach 循环遍历数组时,是按照数组的内部顺序进行的,而 unset() 函数删除元素之后,数组的内部顺序就改变了。

解决这个问题的方法很简单:只需要在删除元素之后,重新对数组进行排序,就可以避免因为数组的内部顺序问题导致的遍历问题了。在 PHP 中,我们可以使用 uasort() 函数来对关联数组按值进行排序。这个函数的用法如下:

uasort($array, function($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
});
Nach dem Login kopieren

uasort() 函数第一个参数是需要排序的数组,第二个参数是用于比较两个值的回调函数。在上面的代码中,我们使用了匿名函数来定义回调函数,通过比较 $a$b 的大小,返回相应的比较结果。

使用上面的代码对 $students

Alice's score is 95
Tom's score is 75
Nach dem Login kopieren

Auf diese Weise kann das Element mit dem Schlüssel 'Jerry' im Array $students gelöscht werden.

Nach dem Löschen von Elementen auf diese Weise ändert sich jedoch die interne Reihenfolge im Array, was beim Durchlaufen des Arrays zu Problemen führen kann. Zum Beispiel:

$students = [
    'Tom' => 75,
    'Jerry' => 82,
    'Alice' => 95
];

unset($students['Jerry']);

uasort($students, function($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
});

foreach ($students as $name => $score) {
    echo "$name's score is $score\n";
}
Nach dem Login kopieren
Nach der Ausführung dieses Codes erhalten wir möglicherweise das Ergebnis:

rrreee

Und die Punktzahl von 'Jerry' wird nicht ausgegeben, da sie gelöscht wurde. Die Hauptursache für dieses Problem liegt darin, dass wir, wenn wir die foreach-Schleife zum Durchlaufen des Arrays verwenden, in der internen Reihenfolge des Arrays fortfahren und nachdem die Funktion unset() die Elemente gelöscht hat, sich die interne Reihenfolge des Arrays ändert. 🎜🎜Die Lösung für dieses Problem ist sehr einfach: Sortieren Sie das Array einfach neu, nachdem Sie die Elemente gelöscht haben, um Durchlaufprobleme zu vermeiden, die durch die interne Reihenfolge des Arrays verursacht werden. In PHP können wir die Funktion uasort() verwenden, um assoziative Arrays nach Wert zu sortieren. Die Verwendung dieser Funktion ist wie folgt: 🎜rrreee🎜uasort() Der erste Parameter der Funktion ist das Array, das sortiert werden muss, und der zweite Parameter ist die Rückruffunktion, die zum Vergleichen der beiden Werte verwendet wird. Im obigen Code verwenden wir eine anonyme Funktion, um eine Rückruffunktion zu definieren und das entsprechende Vergleichsergebnis zurückzugeben, indem wir die Größen von $a und $b vergleichen. 🎜🎜Nachdem wir den obigen Code zum Sortieren des Arrays $students verwendet haben, können wir die folgenden Ergebnisse erhalten: 🎜rrreee🎜Jetzt haben wir das Durchquerungsproblem, das durch das Löschen assoziativer Array-Elemente verursacht wird, erfolgreich vermieden. 🎜🎜Der vollständige Beispielcode lautet wie folgt: 🎜rrreee🎜In diesem Artikel stellen wir vor, wie man assoziative Array-Elemente nach dem Löschen in PHP neu anordnet, um Durchlaufprobleme zu vermeiden, die durch das Löschen von Elementen verursacht werden. Durch das Sortieren assoziativer Arrays können wir sicherstellen, dass wir beim Durchlaufen des Arrays die richtigen Ergebnisse erhalten, wodurch die Stabilität und Zuverlässigkeit der Programmierung verbessert wird. 🎜

Das obige ist der detaillierte Inhalt vonPHP ordnet nach dem Löschen des assoziativen Arrays neu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage