Maison  >  Article  >  développement back-end  >  PHP réorganise après la suppression du tableau associatif

PHP réorganise après la suppression du tableau associatif

WBOY
WBOYoriginal
2023-05-06 13:16:07587parcourir

Lorsque nous effectuons des opérations sur un tableau PHP, nous devons souvent ajouter, supprimer et modifier le tableau. La suppression d'éléments du tableau peut entraîner une modification de l'ordre interne du tableau, et si vous utilisez une boucle foreach pour parcourir le tableau, cela peut entraîner des résultats inattendus. Cet article présentera une méthode pour éviter les problèmes de parcours causés par la suppression d'éléments en supprimant les éléments du tableau associatif, puis en les réorganisant.

Tout d’abord, jetons un coup d’œil aux types de tableaux en PHP.

Il existe deux types de tableaux en PHP : les tableaux indexés et les tableaux associatifs. Les tableaux indexés sont des tableaux indexés sur des nombres entiers commençant à 0, tandis que les tableaux associatifs utilisent des chaînes comme clés. Voici un exemple de tableau associatif :

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

Dans ce tableau, chaque élément a une clé de chaîne et une valeur correspondante.

Maintenant, nous voyons comment supprimer un élément du tableau associatif $students. Ceci peut être réalisé en utilisant la fonction unset() : $students 中删除一个元素。使用 unset() 函数就可以实现:

unset($students['Jerry']);

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

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

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

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

Tom's score is 75
Alice's score is 95

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

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

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

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

使用上面的代码对 $students

Alice's score is 95
Tom's score is 75

De cette façon, l'élément avec la clé 'Jerry' dans le tableau $students peut être supprimé.

Cependant, après avoir supprimé des éléments de cette manière, l'ordre interne dans le tableau change, ce qui peut causer des problèmes lorsque nous parcourons le tableau. Par exemple :

$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";
}
Après avoir exécuté ce code, nous pouvons obtenir le résultat :

rrreee

Et le score de 'Jerry' n'est pas affiché car il a été supprimé. La cause première de ce problème est que lorsque nous utilisons la boucle foreach pour parcourir le tableau, nous procédons dans l'ordre interne du tableau, et après que la fonction unset() supprime les éléments, l'ordre interne du tableau change. 🎜🎜La solution à ce problème est très simple : il suffit de re-trier le tableau après avoir supprimé les éléments pour éviter les problèmes de parcours causés par l'ordre interne du tableau. En PHP, nous pouvons utiliser la fonction uasort() pour trier les tableaux associatifs par valeur. L'utilisation de cette fonction est la suivante : 🎜rrreee🎜uasort() Le premier paramètre de la fonction est le tableau qui doit être trié, et le deuxième paramètre est la fonction de rappel utilisée pour comparer les deux valeurs. Dans le code ci-dessus, nous utilisons une fonction anonyme pour définir une fonction de rappel et renvoyons le résultat de comparaison correspondant en comparant les tailles de $a et $b. 🎜🎜Après avoir utilisé le code ci-dessus pour trier le tableau $students, nous pouvons obtenir les résultats suivants : 🎜rrreee🎜Maintenant, nous avons réussi à éviter le problème de parcours causé par la suppression des éléments associatifs du tableau. 🎜🎜L'exemple de code complet est le suivant : 🎜rrreee🎜Dans cet article, nous expliquons comment réorganiser les éléments d'un tableau associatif après les avoir supprimés en PHP pour éviter les problèmes de parcours causés par la suppression d'éléments. En triant les tableaux associatifs, nous pouvons nous assurer que nous obtenons les bons résultats lors du parcours du tableau, améliorant ainsi la stabilité et la fiabilité de la programmation. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn