Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP如何对树子元素进行降序排序';帕拉姆_Php_Sorting_Tree - Fatal编程技术网

PHP如何对树子元素进行降序排序';帕拉姆

PHP如何对树子元素进行降序排序';帕拉姆,php,sorting,tree,Php,Sorting,Tree,我有一棵像这样的树 array( array('name'=>'n1', 'timestamp'=>1000, 'children'=> array()), array('name'=>'n2', 'timestamp'=>2000, 'children'=> array( array('name'=>'n3', 'timestamp'=>3000, 'children'=> array()), array('name'=&g

我有一棵像这样的树

array(
array('name'=>'n1', 'timestamp'=>1000, 'children'=> array()),
array('name'=>'n2', 'timestamp'=>2000, 'children'=> array(
    array('name'=>'n3', 'timestamp'=>3000, 'children'=> array()),
    array('name'=>'n4', 'timestamp'=>4000, 'children'=> array(
        array('name'=>'n5', 'timestamp'=>4000, 'children'=> array()),
        array('name'=>'n6', 'timestamp'=>3000, 'children'=> array())
    )), 
)),
array('name'=>'n7', 'timestamp'=>3000, 'children'=> array())
)

-n1
-n2
    -n3
    -n4
        -n5
        -n6
-n7
我想按每一级DESC上的时间戳对其进行排序,所以结果将是

-n7
-n2
    -n4
        -n5
        -n6
    -n3
-n1
函数时间戳\u排序(&$a和&$b)
{
如果(!empty($a['children']))
usort($a['children','timestamp_sort');
如果($a['timestamp']=$b['timestamp'])
返回0;
返回$a['timestamp']<$b['timestamp']?1:-1;
}
usort($tree,'timestamp_sort');
我假设您熟悉
usort
函数-如果不熟悉,您应该阅读

除了基本用法之外,我们还做了两件事:

  • 递归排序-当数组包含自身需要排序的项时,
    timestamp\u sort
    函数调用自身
  • 通过引用将参数传递给函数——这样,当我们对子数组进行排序时,我们的更改会更新原始数组。同样,如果你不熟悉推荐人,你应该

请看。因此我找到了一个解决方案函数mysort($node1,$node2){if($node1['timestamp']==$node2['timestamp'])返回0;return($node1['timestamp']>$node2['timestamp'])?-1:1;}函数sortme(&$data){usort($data,“mysort”);foreach($data作为$key=>$node)if(isset($node['children children children and&count node['children 0)排序($data[$key]['children']);}
function timestamp_sort(&$a, &$b)
{
  if (!empty($a['children']))
    usort($a['children'], 'timestamp_sort');
  if ($a['timestamp'] == $b['timestamp'])
    return 0;
  return $a['timestamp'] < $b['timestamp'] ? 1 : -1;
}

usort($tree, 'timestamp_sort');