特定的复杂数组排序

时间:2010-06-08 01:29:02

标签: php arrays sorting multidimensional-array

好的,前一个;

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 个答案:

答案 0 :(得分:1)

您是否看过http://www.php.net/manual/en/function.asort.phphttp://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;

应该为你创建一个很好的层次结构菜单,希望这有帮助。

答案 1 :(得分:1)

该死的,几乎值得获得一个bubblesort算法并完全跳过所有排序功能。 但是:如果你做一个循环:

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

...我认为没有理由用uasort()实现它,尽管是肮脏的工作......

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
}