私は階層的なULツリーを生成するために使用している多次元のPHP配列を持っています。しかし、ULツリーを表示する前に、配列内の各レベルをアルファベット順に 'name'属性でソートしたいと思います。各レベルを再帰的にチェックし、アルファベット順に整理し、次のレベルに移動してそのレベルをソートする関数を想像しています。しかし、私はそれをどうやって行うのか分かりません。どんな助けもありがとう!ネストされた多次元PHP配列の各レベルをソート
マイ配列:
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
)
)
)
)
)
周りの順に移動している私の試み、が、それはまだアルファベット順ではありません。 、配列に注意してください($この、 'sortByName')は私が働いていますCodeIgniterは、によって必要とされています
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:SOLUTION私は、アルゴリズムを入力した
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;
}
とあなたの試みていますか? –
これが役立つかどうかチェックしてください:http://stackoverflow.com/a/3805256/5645769 –
@TareqMahmood参考にしていただきありがとうございます。しかし、そのポストにリストされているソリューションは、多次元配列内の最初のレベルにしか適用されないようです。彼らは私が入れ子配列を持っている私の状況に対処していません。 – skiindude22