Ho un array PHP multidimensionale che sto usando per generare un albero UL gerarchico. Tuttavia, prima di visualizzare la struttura UL, vorrei ordinare ogni livello all'interno della matrice alfabeticamente con l'attributo 'nome'. Sto immaginando una funzione che controlla in modo ricorsivo ogni livello, organizza in ordine alfabetico e passa al livello successivo per ordinare quel livello. Ma non sono sicuro di come farlo. Qualsiasi aiuto sarebbe apprezzato!Ordinamento di ogni livello di un array PHP multidimensionale nidificato
La mia matrice:
Array (
[0] => Array (
[id] => 39348
[parent] => 0
[name] => Test
[children] => Array (
[0] => Array (
[id] => 41911
[parent] => 39348
[name] => Test2
[children] => Array (
[0] => Array (
[id] => 40929
[parent] => 41911
[name] => Test3
[children] => Array (
[0] => Array (
[id] => 40779
[parent] => 40929
[name] => C
)
[1] => Array (
[id] => 40780
[parent] => 40929
[name] => A
)
)
)
)
)
Il mio tentativo, che si sta muovendo l'ordine in giro, ma non è ancora alfabetico. Si noti, il array ($ this, 'sortByName') è richiesto dal CodeIgniter, che sto lavorando in:
function recursive_sort($array) {
usort($array, array($this,'sortByName'));
foreach($array as $key => $value) {
if(isset($value['children']) && !empty($value['children']) && is_array($value['children'])) {
$array[$key]['children'] = $this->recursive_sort($value['children']);
}
}
return $array;
}
function sortByName($a, $b){
return $a->name - $b->name;
}
UPDATE: SOLUZIONE
function recursive_sort($array,$child='children') {
usort($array,function($a,$b){
return strcasecmp($a['name'], $b['name']);
});
foreach($array as $key => $value) {
if(isset($value[$child]) && !empty($value[$child]) && is_array($value[$child])) {
$array[$key][$child] = $this->recursive_sort($value[$child],$child);
}
}
return $array;
}
e il tuo tentativo è? –
Verifica se è utile: http://stackoverflow.com/a/3805256/5645769 –
@TareqMahmood Grazie per il riferimento. Tuttavia, le soluzioni elencate per quel post sembrano solo applicabili al primo livello all'interno dell'array multidimensionale. Non affrontano la mia situazione in cui ho array annidati. – skiindude22