我已经检查了有关排序多维数组的其他问题,但在我的情况下它们都没有 我的数组如下所示,我希望基于id值按降序排序
$arr = array(
49 => array(
'id' => 65,
'name' => 'any',
'users' => array(
772 => array(
'id' => 149,
'name' => 'any1'
),
771 => array(
'id' => 779,
'name' => 'any2'
),
45 => array(
'id' => 259,
'name' => 'any3'
)
)
),
789 => array(
'id' => 892,
'name' => 'any4',
'users' => array(
65 => array(
'id' => 389,
'name' => 'any5'
),
98 => array(
'id' => 895,
'name' => 'any6'
),
99 => array(
'id' => 899,
'name' => 'any7'
)
)
)
);
我尝试使用usort函数进行排序
usort($arr, function($a, $b) {
return $b['id'] - $a['id'];
});
但我的要求是对父类和子数组进行排序,但这只是父类
答案 0 :(得分:1)
由于父母和孩子的排序规则相同,我只是定义了一个比较函数。您只需要遍历每个父项并对子项进行排序。
//compare function, sorts by id in desc order
function cmp($a, $b){
return $b['id'] - $a['id'];
}
//loop over each parent by reference so it changes the value in the parent array
foreach($arr as &$parent){
//sort the children
uasort($parent['users'], 'cmp');
}
//unset the parent array so we don't overwrite the last parent later
unset($parent);
//sort the parents
uasort($arr, 'cmp');
演示:http://codepad.viper-7.com/hqM122
编辑:添加了保留密钥的要求。刚刚转到了uasort。
答案 1 :(得分:0)
试试这个:
function myCallback($left,$right)
{
return $right['id'] - $left['id'];
}
function id_sort(&$array)
{
if (!is_array($array))
return;
foreach ($array as &$elem)
if (array_key_exists('users',$elem))
id_sort($elem['users']);
uasort($array,'myCallback');
}
id_sort($arr);
这会按父母的ID降序排序,父母的子女按递减顺序排序。