0

こんな木があります

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
4

1 に答える 1

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そうでない場合は、ドキュメントをお読みください。

基本的な使用法にusort加えて、2つの追加のことを行っています。

  • 再帰的な並べ替え-timestamp_sort配列に並べ替えが必要な項目が含まれている場合、関数はそれ自体を呼び出します。
  • 参照によってパラメーターを関数に渡します。これにより、子配列を並べ替えるときに、変更によって元の配列が更新されます。繰り返しになりますが、参照に精通していない場合は、それを読む必要があります。
于 2013-02-28T03:11:54.343 に答える