Ordinare un array multidimensionale per le chiavi del sottoarray
Se un array ha al suo interno una serie di altri array, tutti uguali, con gli stessi sottoelementi e si vuole ordinare questo primo array secondo ordine degli elementi del sottoarray viene comoda la funzione array_multisort
che permette di ordinare un array secondo l'ordine di un secondo array.
In pratica:
<?php
$list = [
'one' => [
'positive' => 3,
'negative' => 2
],
'two' => [
'positive' => 1,
'negative' => 0
],
'three' => [
'positive' => 5,
'negative' => 0
],
'four' => [
'positive' => 4,
'negative' => 5
],
'five' => [
'positive' => 6,
'negative' => 2
],
];
foreach ($list as $key => $value) {
$list[$key]['score'] = $value['positive'] - $value['negative'];
}
foreach ($list as $key => $value) {
$score[$key] = $value['score'];
$positive[$key] = $value['positive'];
$negative[$key] = $value['negative'];
}
array_multisort(
$score, SORT_DESC,
$positive, SORT_DESC,
$negative, SORT_ASC,
$list
);
echo '<pre>'.print_r($list, 1).'</pre>';
Partendo dalla lista faccio un primo ciclo per trovare lo score
che è la differenza tra positive - negative
. È il parametro per cui voglio ordinare in prima istanza: per chi ha più score
, poi voglio ordinare per chi ha più positive
e infine per chi ha meno negative
.
Faccio quindi un secondo ciclo per avere una lista di ogni punteggio: $score
; $positive
; $negative
. Questi nuovi array, dotati delle stesse chiavi di $list
saranno i parametri di ordinamento di $list
stesso attraverso la funzione array_multisort
che prende poi come ultimo parametro l'array da ordinare secondo quei parametri.
Last updated
Was this helpful?