J'ai un tableau comme celui-ci:
Tableau ( [0] => Tableau ( 'Name' => "Friday" "Poids" => 6 ) [1] => Tableau ( 'Name' => "Monday" 'Weight' => 2 ) )
J'aimerais saisir les dernières valeurs de ce tableau (le "poids") et les utiliser pour trier les principaux éléments du tableau. Donc, dans ce tableau, je souhaiterais le trier de sorte que l'élément 'Monday' apparaisse avant l'élément 'Friday'.
Vous pouvez utiliser usort
as:
function cmp($a, $b) {
return $a['weight'] - $b['weight'];
}
usort($arr,"cmp");
Peut être fait en utilisant une fonction anonyme .
De plus, si votre "poids" est un string , utilisez l’un des autres retours (voir les lignes commentées):
<?php
$arr = array(
0 => array (
'name' => 'Friday',
'weight' => 6,
),
1 => array (
'name' => 'Monday',
'weight' => 2,
),
);
// sort by 'weight'
usort($arr, function($a, $b) { // anonymous function
// compare numbers only
return $a['weight'] - $b['weight'];
// compare numbers or strings
//return strcmp($a['weight'], $b['weight']);
// compare numbers or strings non-case-sensitive
//return strcmp(strtoupper($a['weight']), strtoupper($b['weight']));
});
var_export($arr);
/*
array (
0 => array (
'name' => 'Monday',
'weight' => 2,
),
1 => array (
'name' => 'Friday',
'weight' => 6,
),
)
*/
essayez ceci: http://php.net/manual/en/function.usort.php
D'accord avec usort, j'utilise aussi parfois array_multisort ( http://ca2.php.net/manual/en/function.usort.php ) exemple 3, tri des résultats de la base de données. Vous pouvez faire quelque chose comme:
<?php
$days = array(
array('name' => 'Friday', 'weight' => 6),
array('name' => 'Monday', 'weight' => 2),
);
$weight = array();
foreach($days as $k => $d) {
$weight[$k] = $d['weight'];
}
print_r($days);
array_multisort($weight, SORT_ASC, $days);
print_r($days);
?>
Sortie:
Array
(
[0] => Array
(
[name] => Friday
[weight] => 6
)
[1] => Array
(
[name] => Monday
[weight] => 2
)
)
Array
(
[0] => Array
(
[name] => Monday
[weight] => 2
)
[1] => Array
(
[name] => Friday
[weight] => 6
)
)
Vous pouvez également utiliser une fonction anonyme.
usort($items, function($a, $b) {
return $a['name'] > $b['name'];
});
Si le fichier que vous triez est une chaîne comme title
name
,
array_multisort + Les drapeaux pour le tri naturel et CaseInSensitivity sont le chemin à parcourir:
$sort_by_title = array();
foreach($items as $item) {
$sort_by_title [] = $item['title'];
}
array_multisort($sort_by_title , SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE, $items );
NOTE: si l'élément sur lequel vous triez est un float comme .0534 et .0353 (comme pour un pourcentage), vous devez alors multiplier les deux par 1000. Vous ne savez pas pourquoi, franchement ... il semble que l'usort semble comparer le nombre entier valeurs.
m'a pris un peu de temps pour comprendre celui-là ...
et 2 astuces qui peuvent ne pas être immédiatement évidentes: