代码之家  ›  专栏  ›  技术社区  ›  Lukas Oppermann

php:按字段对每个元素具有不同深度的多维数组排序

  •  0
  • Lukas Oppermann  · 技术社区  · 16 年前

    我有一个complexe排序的数组来存储我的导航(用户应该在之后更改导航)。我不想让脚本只工作在3个层次的深度,所以我正在寻找一个很好的方式来排序这个数组的位置字段。

    $nav[1]=array(  
      'name'=>'home',  
      'position'=>'2',  
    children=>array(
    
        [1]=array(
        'name'=>'page2',
         position=>'3'),
    
        [2]=array(
        'name'=>'page3',
        'position'=>'1'),
    
        [3]=array(
        'name'=>'page4',
        'position'=>'2')
    )
    $nav[2]=array(
      'name'=>'Second level 1',
      'position'=>'1'
    );
    

    我希望有人能帮助我,谢谢你考虑这个问题。

    2 回复  |  直到 16 年前
        1
  •  3
  •   LukáÅ¡ Lalinský    16 年前

    每个排序 children 递归数组。例如:

    function cmp($a, $b)
    {
        $ap = intval($a['position']);
        $bp = intval($b['position']);
        if ($ap == $bp) {
            return 0;
        }
        return ($ap < $bp) ? -1 : 1;
    }
    
    function sort_menu(&$item)
    {
        if ($item['children']) {
            foreach ($item['children'] as &$child) {
                sort_menu($child);
            }
            usort($item['children'], "cmp");
        }
    }
    
    $tmp = array('children' => $nav);
    sort_menu($tmp);
    $nav = $tmp['children'];
    
        2
  •  0
  •   Arkadiusz Kondas    16 年前

    下面是一个usort的例子。

    function yourSortFunction($a, $b)
    {
        if ($a['position'] == $b['position']) {
            return 0;
        }
        return ($a['position'] < $b['position']) ? -1 : 1;
    }
    
    usort($nav, "yourSortFunction");'
    

    你可以在其他函数中递归地调用它的$NaV数组。

    推荐文章