代码之家  ›  专栏  ›  技术社区  ›  TheDeadMedic

特定复杂数组排序

  •  2
  • TheDeadMedic  · 技术社区  · 16 年前

    好吧,一个月前;

    Array (
        'home' => array('order' => 1),
        'about' => array(),
        'folio' => array('order' => 2),
        'folio/web' => array('order' => 2),
        'folio/print' => array('order' => 1)
        'contact' => array('order' => 2)
    )
    

    和一个渴望的追求;

    Array (
        'home' => array('order' => 1),
        'contact' => array('order' => 2),
        'folio' => array('order' => 2),
        'folio/print' => array('order' => 1),
        'folio/web' => array('order' => 2),
        'about' => array()
    )
    

    我知道,很可怕(不要问!)

    但同样顺序的多个“同一级别”项如何仅仅按键排序呢?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Wrikken    16 年前

    该死,几乎值得得到一个气泡排序算法和跳过所有排序函数一起。

    foreach($array as $idx => $ar){
        $array[$idx]['key'] = $idx;
    }
    

    function somesorter($a,$b){
        //check 'keys' entry in $a & $b first for slash, act accordingly if clear
        //check absence or 'order' entry in one or both
        //compare order entry
    }
    
        2
  •  1
  •   RobertPitt    16 年前

    http://www.php.net/manual/en/function.asort.php http://www.php.net/manual/en/function.sort.php

    sort 一定要检查旗子。

    这个数组可能会引起很多问题,我建议您将它改为

    'home' => array(
        'meta' => array('order' => 1)
     ),
    'folio' => array(
        'meta' => array('order' => 2),
        'children' => array(
            'print' => array(
                 'meta' => array('order' => 1)
                  /*Other Children*/
             ),
            'web' => array(
                  'meta' => array('order' => 2)
             )
         )
     ),
    

    试着做一些递归的事情。

    function show_menu(&$return,$array)
    {
        $return .= '<ul>';
        foreach($array as $name => $inner)
        {
           $return .= '<li>' . $name
           if(isset($inner['children']))
           {
               show_menu(&$return,$inner['children']);
           }
           $return .= '</li>';
        }
        $return .= '</ul>';
    }
    
    $menu = '';
    show_menu(&$menu,$menu_array);
    
    echo $menu;