J'ai un tableau qui ressemble à ceci:
Array
(
[team1] => Array
(
[points] => 10
[players] => Array
(
...
)
)
[team2] => Array
(
[points] => 23
[players] => Array
(
...
)
)
... many more teams
)
et je voudrais trier les équipes par le nombre de points que chaque équipe a. J'ai essayé ceci:
function sort_by_points($a,$b)
{
if ($a['points']==$b['points']) return 0;
return ($a['points']<$b['points'])?1:-1;
}
usort($this->wordswithdata, "sortbycount");
Mais cette approche remplace les clés contenant les noms d’équipe et renvoie:
Array
(
[0] => Array
(
[points] => 23
[players] => Array
(
...
)
)
[1] => Array
(
[points] => 10
[players] => Array
(
...
)
)
etc...
)
Existe-t-il un moyen de trier le tableau sans écraser les noms d’équipe sous forme de clés de tableau?
Utilisez la fonction uasort , qui devrait conserver les associations clé => valeur intactes.
(note latérale: vous pouvez faire return $a['points'] - $b['points']
au lieu des ifs)
Vous pouvez utiliser uasort
:
uasort($array, function($a, $b) {
return $a['points'] - $b['points'];
});
Cette fonction trie un tableau de sorte que les indices de tableau conservent leur corrélation avec les éléments de tableau auxquels ils sont associés, à l'aide d'une fonction de comparaison définie par l'utilisateur.
U peut trier un tableau associatif par sa valeur comme ceci
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
function Ascending($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
function Descending($a, $b) {
if ($a == $b) {
return 0;
}
return ($a > $b) ? -1 : 1;
}
echo "Ascending order" ;
uasort($age,"Ascending");
print_r($age);
echo "</br>Descending order" ;
uasort($age,"Descending");
print_r($age);
its working fine i giving example
that array need sort
$sumarray=array [▼
484 => 54.7875
486 => 53.5375
487 => 52.9125
488 => 52.2875
493 => 54.7875
]
$original=$sumarray;
$svalue=array_values($sumarray);
rsort($svalue);
$sorted=array();
foreach ($svalue as $key => $value) {
$kk=array_search($value,$sumarray);
$sorted[$kk]=$value;
unset($sumarray[$kk]);
}
print_r($original);
print_r($svalue);
print_r($sorted);
//out put
array:5 [▼
484 => 54.7875
486 => 53.5375
487 => 52.9125
488 => 52.2875
493 => 54.7875
]
array:5 [▼
0 => 54.7875
1 => 54.7875
2 => 53.5375
3 => 52.9125
4 => 52.2875
]
array:5 [▼
484 => 54.7875
493 => 54.7875
486 => 53.5375
487 => 52.9125
488 => 52.2875
]