2010-06-08 48 views
2

好吧,一个之前;特定的复杂数组排序

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() 
) 

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

见关键中的斜线如何指示的孩子,以及如何才能被相应拼图?而没有订单的物品则简单地移到底部。

但是,同样的顺序多个'同级别'项目是如何仅仅通过关键字排序呢?

+0

你可以澄清你的问题?你在问什么?一种执行指定排序的算法?或伪代码?或者是什么? – atk 2010-06-08 01:43:30

+0

你是否坚持数组结构(我的意思是你不能改变它)? – putolaruan 2010-06-08 02:35:45

+0

不,没有被卡住,但是结构使得我必须做的其他操作更容易。 – TheDeadMedic 2010-06-08 15:22:14

回答

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 
} 
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; 

应该创建一个很好的层次菜单,希望这有助于。

+0

欢迎回复罗伯特 - 我同意你提出的层次结构,但是我现在通过让其他操作变得更加困难来衡量权衡。我会有一个思考,也许重新评估我的方法! – TheDeadMedic 2010-06-08 15:25:01

+0

这将是最好的选择Medic,在整个应用程序中遇到这些问题的美妙之处在于,您可以从错误中学习。下一次构建应用程序时,您将采用层次结构方法来使您的生活更轻松。 – RobertPitt 2010-06-08 16:49:50