Il est très pratique de trier des tableaux avec trié de la fonction Nspl :
Triage de base
// Sort array
$sorted = sorted([3, 1, 2]);
// Sort array in descending order
$sortedDesc = sorted([3, 1, 2], true);
Triage par résultat de fonction
// Sort array by the result of a given function (order words by length)
$sortedByLength = sorted(['bc', 'a', 'abc'], 'strlen');
$sortedByLengthDesc = sorted(['bc', 'a', 'abc'], true, 'strlen');
// Sort array by the result of user-defined function (order words by the 1st character)
$sortedByTheFirstCharacter = sorted(['bc', 'a', 'abc'], function($v) { return $v[0]; });
// Which is the same as
$sortedByTheFirstCharacter = sorted(['bc', 'a', 'abc'], itemGetter(0));
$sortedByTheFirstCharacterDesc = sorted(['bc', 'a', 'abc'], true, itemGetter(0));
// itemGetter(0) returns a function which takes an argument with access by index/key
// and returns the value at index 0
Tri d'un tableau multidimensionnel
// Sort multidimensional array (sort list of users by their names)
$users = [
array('name' => 'Robert', 'age' => 20),
array('name' => 'Alex', 'age' => 30),
array('name' => 'Jack', 'age' => 25),
];
$sortedByName = sorted($users, itemGetter('name'));
$sortedByNameDesc = sorted($users, true, itemGetter('name'));
// itemGetter('name') returns a function which takes an argument with access by index/key
// and returns the value of the 'name' key
Tri d'un tableau d'objets
// Lets assume we have class User(name, age) with properties name and age
// and public methods getName() and getAge()
$users = [
new User('Robert', 20),
new User('Alex', 30),
new User('Jack', 25),
];
// Sort list of objects by property value (sort list of users by their name)
$sortedByName = sorted($users, propertyGetter('name'));
$sortedByNameDesc = sorted($users, true, propertyGetter('name'));
// propertyGetter('name') returns a function which takes an object
// and returns the value of its 'name' property
// Sort list of objects by method result (sort list of users by their age)
$sortedByAge = sorted($users, methodCaller('getAge'));
$sortedByAgeDesc = sorted($users, true, methodCaller('getAge'));
// methodCaller('getAge') returns a function which takes an object
// and returns the result of its getAge() method
Triage avec une fonction de comparaison
// Sort with a comparison function (order words lexicographically with strcmp)
$sortedLexicographically = sorted(['bc', 'a', 'abc'], false, null, 'strcmp');
// Sort with user-defined comparison function (order words by the 1st character)
$sortedByTheFirstCharacter = sorted(['bc', 'a', 'abc'], false, null, function($v1, $v2) {
return chr($v1[0]) - chr($v2[0]);
});
Vous pouvez voir tous ces exemples aquí .
0 votes
@jterry Exactement, c'est pour cela que je l'ai fait, pour avoir enfin une bonne question de référence pour conclure. Répondre à chaque flocon de neige individuellement n'aide personne :)
3 votes
Je pense que les gens devraient simplement jeter un coup d'oeil à php.net.
0 votes
@Alex Ha ! Absolument. Le problème est que personne ne fait de RTFM. :D
2 votes
Nous avons déjà ces réponses, je vous suggère de lister les meilleures réponses à l'intérieur de chaque réponse ici au lieu de dupliquer (ou réécrire) le contenu. De plus, les tableaux ont tendance à être vus individuellement, donc le travail reste de fermer le vote contre les doublons dans tous les cas.
0 votes
Vous pourriez mettre un lien vers celui-ci dans le wiki des tags de la communauté, car il y a des liens vers d'autres posts avec une configuration similaire, par exemple : éviter l'injection sql, les différences d'opérateurs, etc.
1 votes
@deceze : Si personne ne fait de RTFM, personne ne fera aussi de RTFQA - les questions et réponses existantes :)
0 votes
@hakre Oui, tout cela a déjà été répondu dans un millier de cas distincts, c'est pourquoi il est pratiquement impossible de les trouver. D'où ceci. Si vous avez de bonnes réponses, n'hésitez pas à les ajouter à la réponse.
0 votes
Oui, mais à chaque fois que je rencontre une question, je connaître a été répondu des milliers de fois, il est impossible de trouver une bonne référence à laquelle se référer. Je ne m'attends pas à ce que les gens le trouvent par eux-mêmes, je veux que ce soit une référence proche.
0 votes
@hakre Je comprends où vous voulez en venir, mais la référence de l'erreur est un peu différente, je pense. Pour le tri, il suffit de comprendre une fois ; je pense que cela fonctionne mieux avec une seule réponse cohérente expliquant les différents angles. La décomposition en plusieurs réponses distinctes rendrait chacune d'entre elles plus difficile à comprendre, selon moi.
0 votes
@dat Cela montre d'autant plus à quel point une référence canonique est nécessaire, s'il y a déjà plusieurs couches de questions qui pointent ici. Si vous avez une idée particulière d'amélioration à partager, vous devriez en parler à Meta.SO.