【问题标题】:PHP: Sort Multidimensional Array with Different Depth per element by FieldPHP:按字段对每个元素具有不同深度的多维数组进行排序
【发布时间】:2009-10-27 08:05:51
【问题描述】:

我有一个复杂排序的数组来存储我的导航(应该由用户之后更改)。我不想让脚本只使用 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'
);

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

【问题讨论】:

    标签: php multidimensional-array


    【解决方案1】:

    对每个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】:

    这里是一个usort的例子。

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

    您可以在 $nav 数组中以递归方式在其他函数中调用它。

    【讨论】:

    • 嘿,我的问题是,我没有得到递归来处理未知的,可能是无限数量的级别(...的孩子的孩子的孩子)
    • 好的,我会再试一次并更仔细地研究它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多