PHP如何通过param降序排序树子

时间:2013-02-28 02:43:51

标签: 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'=>'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

1 个答案:

答案 0 :(得分:1)

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');

我假设你熟悉usort函数 - 如果没有,你应该阅读documentation

usort的基本用法外,我们还要做两件事:

  • 递归排序 - 当数组包含本身需要排序的项时,timestamp_sort函数会调用自身。
  • 通过引用将参数传递给函数 - 这样当我们对子数组进行排序时,我们的更改会更新原始数组。同样,如果您不熟悉参考文献,则应read up on it