array_multisort
(PHP 4, PHP 5, PHP 7)
array_multisort — Trie les tableaux multidimensionnels
Description
&$array1
[, mixed $array1_sort_order
= SORT_ASC
[, mixed $array1_sort_flags
= SORT_REGULAR
[, mixed $...
]]] )array_multisort() sert à trier simultanément plusieurs tableaux, ou bien à trier un tableau multidimensionnel, suivant l'une ou l'autre de ses dimensions.
Les clés associatives (chaîne de caractères) seront maintenues, mais les clés numériques seront réindexées.
Note:
Si deux membres se comparent comme égaux, leur ordre relatif dans le tableau trié n'est pas défini.
Liste de paramètres
-
array1
-
Un tableau à trier.
-
array1_sort_order
-
L'ordre utilisé pour trier le précédent argument array. Soit la constante
SORT_ASC
pour trier de façon croissant, soit la constanteSORT_DESC
pour trier de façon décroissant.Cet argument peut être associé avec le paramètre
array1_sort_flags
ou simplement omis, auquel cas, la constanteSORT_ASC
sera utilisée. -
array1_sort_flags
-
Options de tri du précédent argument array :
Type d'options de tri :
-
SORT_REGULAR
- compare les éléments normalement (pas de changement de type) -
SORT_NUMERIC
- compare les éléments numériquement -
SORT_STRING
- compare les éléments sous forme de chaînes de caractères -
SORT_LOCALE_STRING
- compare les éléments sous forme de chaînes de caractères, en se basant sur la locale courante. La fonction utilise les locales, et elles peuvent être modifiées en utilisant la fonction setlocale() -
SORT_NATURAL
- compre les éléments sous forme de chaînes de caractères, en utilisant le "tri naturel", comme le fait la fonction natsort() -
SORT_FLAG_CASE
- peut être combiné (avec le mot clé OR) avecSORT_STRING
ouSORT_NATURAL
pour trier les chaînes sans tenir compte de la casse
Cet argument peut être associé avec le paramètre
array1_sort_order
ou simplement omis, auquel cas, la constanteSORT_REGULAR
sera utilisée. -
-
...
-
Plus d'arguments, optionnellement suivis par des façons de trier et des drapeaux. Seuls les éléments équivalents dans les tableaux précédents sont comparés. En d'autres termes, le tri est lexicographique.
Historique
Version | Description |
---|---|
5.4.0 |
Les options SORT_NATURAL et SORT_FLAG_CASE
ont été ajoutées comme options possibles pour l'argument
array1_sort_flags .
|
5.3.0 |
L'option SORT_LOCALE_STRING a été ajoutée comme option possible pour
l'argument array1_sort_flags .
|
Exemples
Exemple #1 Trier plusieurs tableaux
<?php
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);
var_dump($ar1);
var_dump($ar2);
?>
Dans cet exemple, après le tri, le premier tableau contient 0, 10, 100, 100. Le deuxième tableau contient 4, 1, 2, 3. Les entrées du second tableau correspondant aux valeurs jumelles du premier tableau (100 et 100), sont aussi triées.
array(4) { [0]=> int(0) [1]=> int(10) [2]=> int(100) [3]=> int(100) } array(4) { [0]=> int(4) [1]=> int(1) [2]=> int(2) [3]=> int(3) }
Exemple #2 Trier un tableau multidimensionnel
<?php
$ar = array(
array("10", 11, 100, 100, "a"),
array( 1, 2, "2", 3, 1)
);
array_multisort($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>
Dans cet exemple, après le tri, le premier tableau contient "10", 100, 100, 11, "a" (tri alphabétique, ordre croissant); Le deuxième tableau contient 1, 3, "2", 2, 1 (tri numérique, ordre décroissant).
array(2) { [0]=> array(5) { [0]=> string(2) "10" [1]=> int(100) [2]=> int(100) [3]=> int(11) [4]=> string(1) "a" } [1]=> array(5) { [0]=> int(1) [1]=> int(3) [2]=> string(1) "2" [3]=> int(2) [4]=> int(1) } }
Exemple #3 Classer les résultats d'une base de données
Dans cet exemple, chaque élément du tableau data représente une ligne de la table. Ce type de données est typique d'un enregistrement de base de données.
Exemple de données :
volume | edition -------+-------- 67 | 2 86 | 1 85 | 6 98 | 2 86 | 6 67 | 7
Les données sont sous forme de tableau, appelé data. Cela est généralement le résultat, par exemple, de la fonction mysqli_fetch_assoc().
<?php
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
?>
Dans cet exemple, nous allons trier la colonne volume par ordre décroissant, et la colonne edition par ordre croissant.
Nous avons un tableau de lignes, mais array_multisort() nécessite un tableau de colonnes, donc nous utilisons le code suivant pour obtenir les colonnes et ainsi effectuer le tri.
<?php
// Obtient une liste de colonnes
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// a partir de PHP 5.5.0 vous pouvez utiliser array_column() au lieu du code ci-dessus
$volume = array_column($data, 'volume');
$edition = array_column($data, 'edition');
// Trie les données par volume décroissant, edition croissant
// Ajoute $data en tant que dernier paramètre, pour trier par la clé commune
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
Le jeu d'enregistrement est maintenant trié et ressemble à cela :
volume | edition -------+-------- 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7
Exemple #4 Tri non sensible à la casse
SORT_STRING
et
SORT_REGULAR
sont sensibles à la casse, les chaînes
de caractères commençant avec une lettre en majuscule viendront avant
les chaînes de caractères commençant par une lettre en minuscule.
Pour effectuer un tri insensible à la casse, effectuez le tri sur une copie minuscule des colonnes du tableau original.
<?php
$array = array('Alpha', 'atomic', 'Beta', 'bank');
$array_lowercase = array_map('strtolower', $array);
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array);
print_r($array);
?>
L'exemple ci-dessus va afficher :
Array ( [0] => Alpha [1] => atomic [2] => bank [3] => Beta )
Voir aussi
- usort() - Trie un tableau en utilisant une fonction de comparaison
- Les fonctions de tri des tableaux
Version en cache
05/11/2024 16:21:57 Cette version de la page est en cache (à la date du 05/11/2024 16:21:57) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-function.array-multisort.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.