Tri d'un tableau par valeur de sous-tableau en PHP
L'ordre des structures de données est une tâche de programmation courante, et les tableaux sont fréquemment utilisés pour stocker et gérer recueils d’informations. En PHP, les tableaux peuvent contenir des structures imbriquées, y compris des tableaux comme valeurs. Le tri de tableaux multidimensionnels peut être utile pour diverses raisons, telles que l'organisation de données ou l'extraction d'éléments spécifiques.
Énoncé du problème :
Considérez la structure de tableau suivante :
$array = [ [ 'configuration_id' => 10, 'id' => 1, 'optionNumber' => 3, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 9, 'id' => 1, 'optionNumber' => 2, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 8, 'id' => 1, 'optionNumber' => 1, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], ];
L'objectif est de trier ce tableau de manière incrémentielle en fonction de la clé 'optionNumber', ce qui donne le suivant :
$sortedArray = [ [ 'configuration_id' => 8, 'id' => 1, 'optionNumber' => 1, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 9, 'id' => 1, 'optionNumber' => 2, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 10, 'id' => 1, 'optionNumber' => 3, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], ];
Solution :
Pour trier le tableau, nous pouvons utiliser la fonction usort de PHP. usort prend deux arguments : le tableau à trier et une fonction de comparaison qui détermine l'ordre des éléments. La fonction de comparaison doit renvoyer une valeur négative si le premier élément doit venir avant le second, zéro s'ils sont équivalents et une valeur positive si le premier élément doit venir après le second.
Dans ce cas, notre comparaison La fonction peut être définie comme suit :
function cmp_by_optionNumber($a, $b) { return $a['optionNumber'] - $b['optionNumber']; }
Cette fonction soustrait la valeur 'optionNumber' du premier tableau du second, ce qui donne une valeur négative si le premier élément doit venir avant le second, une valeur nulle s'ils sont égaux, et une valeur positive si le premier élément doit venir après le second.
Pour utiliser cette fonction de comparaison avec usort, on la passe simplement comme deuxième argument :
usort($array, 'cmp_by_optionNumber');
Cela triera le tableau sur place, en modifiant la variable $array d'origine pour refléter l'ordre de tri. La variable $array résultante sera identique à l'exemple $sortedArray fourni précédemment.
Syntaxe alternative :
Dans les versions PHP 5.3 et ultérieures, une fonction anonyme peut être utilisée au lieu de la fonction de comparaison nommée :
usort($array, function ($a, $b) { return $a['optionNumber'] - $b['optionNumber']; });
PHP 7.0 et Ci-dessus :
Dans les versions PHP 7.0 et supérieures, l'opérateur du vaisseau spatial <=> peut être utilisé à la place de la soustraction dans la fonction de comparaison pour éviter les problèmes de débordement/troncation :
usort($array, function ($a, $b) { return $a['optionNumber'] <=> $b['optionNumber']; });
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!