Comment trier un tableau multidimensionnel par l'un des champs du tableau interne en PHP?
Supposons que j'ai un tableau qui imite une table de base de données. Chaque élément du tableau représente une ligne, et dans chaque ligne est un autre tableau qui contient les noms des champs et des valeurs.
Array
(
[0] => Array
(
[name] => 'Sony TV'
[price] => 600.00
)
[1] => Array
(
[name] => 'LG TV'
[price] => 350.00
)
[2] => Array
(
[name] => 'Samsung TV'
[price] => 425.00
)
}
Ce que je veux faire est de trier les lignes (externe des éléments d'un tableau) par le prix. Ci-dessous est un exemple de ce que je veux réaliser:
Array
(
[0] => Array
(
[name] => 'LG TV'
[price] => 350.00
)
[1] => Array
(
[name] => 'Samsung TV'
[price] => 425.00
)
[2] => Array
(
[name] => 'Sony TV'
[price] => 600.00
)
}
Comme vous pouvez le voir, je n'ai pas besoin de préserver les touches de la face externe de la matrice.
source d'informationauteur Camsoft
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser usortune fonction qui trie les tableaux par l'intermédiaire d'une fonction définie par l'utilisateur. Quelque chose comme:
Vous pouvez utiliser
usort()
:Encore mieux si vous créez une classe de ce genre pour réutiliser le code:
De cette façon, vous pouvez facilement trier par d'autres domaines.
Et bien que vous avez dit que les touches de la face externe de la matrice de ne pas avoir à le être préservée, vous pouvez facilement obtenir à l'aide de
uasort()
au lieu deusort
.C'est juste un liner
Vous pouvez le trouver ici: http://php.net/manual/en/function.array-multisort.php
de la recherche pour "array_column" sur cette page de manuel.
Vous pouvez utiliser la fonction usort avec un rappel
http://www.php.net/manual/en/function.usort.php
Cette question est un peu vieux, mais laissez la réponse pour le futur.
De php.net-Multisort
fonction, nous pouvons utiliser le code ci-dessous;
Ci-dessus est pour une charge statique de tri de données, où vous modifiez manuellement des colonnes de tri.
Pour plus de dynamique et robuste exemple, considérons ci-dessous;
Supposons que j'ai données ci-dessous;
Si nous avons besoin de trier le tableau ci-dessus les données de la boîte, nous pouvons alors définir l'ordre de tri d'un tableau à l'aide de la syntaxe;
Cela signifie trier la colonne 1 de l'ASC, la colonne 4 DESC puis la colonne 3 de l'ASC.
Nous pouvons alors utiliser la fonction ci-dessous pour trier nos multidimension données de base de données;
Alors nous pouvons l'utiliser comme ci-dessous;
Pour la valeur de la clé de la matrice de données
E.g. $data=[['c1'=>1212,'c2'=>'mynames'],...];
Utilisez la commande
$order=['c1'=>'desc','c10'=>'asc'];
J'ai testé le dessus avec un tableau de 1000 enregistrements.
Espérons que cela aide quelqu'un.
C'est essentiellement la même que l'on a accepté la réponse, mais un couple de nouvelles fonctionnalités ont été ajoutées à PHP au fil des ans pour le rendre plus pratique à utiliser
usort
pour cela.Vous pouvez maintenant utiliser une fonction anonyme pour la comparaison de rappel (PHP 5.3), et PHP 7 a introduit le combiné opérateur de comparaison (
<=>
), ce qui permet de réduire la logique de comparaisonà une seule expression
Une alternative à usort est de créer un tableau dont les indices du tableau que vous souhaitez trier et est indexé par les données que vous souhaitez trier.
Dans l'extrait de code ci-dessous, $customAttributes est un tableau d'objets que je voudrais trier par nom. Première $tri est créé, indexée par nom et contenant l'index de tableau correspondant à la $customAttributes élément.
ksort est ensuite utilisé pour trier le tableau par clé.
Une fois le $tri tableau a été trié, parcourir et créer l' $commandé tableau.
J'aime cette solution car il y a moins d'appels de fonction que d'utiliser les callbacks.
Vous pouvez créer une fonction-vous comme celui-ci,
fonction privée orderArrayBycolumn($array, $column){