J'ai un tableau comme suit et je veux commander ce tableau par la valeur de la clé "Attack". Les premières clés des tableaux Ceci est le tableau: p> (15, 13, 18) code> sont identifiant de certains éléments de certains éléments de la base de données, donc je ne veux pas que ces touches soient modifiées lorsque le tableau est trié. Toute aide serait grandement appréciée. $data = array(
'15' => array(
'attack' => '45', 'defence' => '15', 'total' => '10'
),
'13' => array(
'attack' => '25', 'defence' => '15', 'total' => '10'
),
'18' => array(
'attack' => '35', 'defence' => '15', 'total' => '10'
)
);
3 Réponses :
Utilisez uasort () code> :
Cette fonction trie un tableau de telle sorte que les indices de réseau conservent leur corrélation avec les éléments de réseau qu'ils sont associés à une fonction de comparaison définie par l'utilisateur. P>
Ceci est principalement utilisé lors du tri des tableaux associatifs où l'ordre d'élément réel est significatif. P> blockQuote>
Exemple: p>
xxx pré> si les valeurs sont toujours des chaînes, vous pouvez également utiliser
strcmp () code>dans leCMP () code> Fonction: p>return $b['attack'] - $a['attack'];
Boo pour un rappel trop compliqué. $ a ['attaque'] - $ b ['attaque']; code> suffirait.
@salathe: True, ce serait plus efficace. Mais cela est plus conforme aux exemples de la documentation.
@Chris: uasort code> trie le tableau en place. Il renvoie vrai code> sur le succès (mentionné dans la documentation que j'ai liée à). Si vous souhaitez imprimer le résultat, vous devez imprimer le tableau.
Bien sûr, j'imprime le tableau à l'aide de print_R, mais il n'imprime que 1 à l'écran.
@Chris: Pas pour moi. Je reçois le tableau de tri ... Doit être autre chose dans votre code.
Désolé mon mauvais. J'ai vu que j'imprimais quelque chose d'autre. J'ai une autre question. Comment puis-je trier la valeur par ordre décroissant?
Merci pour toutes les réponses.
@Felix - Je suppose que les documents pourraient offrir des exemples plus variés et / ou affirmer que les valeurs ne doivent pas nécessairement être dans l'ensemble -1, 0 et 1.
Utilisez simplement Array_Multisort
foreach ($data as $key => $row) {
$attack[$key] = $row['attack'];
}
// Sort the data with attack descending
array_multisort($attack, SORT_DESC, $data);
$result = [];
foreach ($data as $key => $value) {
$result[$key] = $value;
asort($result[$key]);
}
print_r($result);
Hope this helps !!!