2010-06-08 72 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