2011-01-26 97 views
1

我試圖數組排序PHP中的下列方式排序陣列模仿層次:試圖通過在PHP

array 
0 => id:1203 
     parent_id: 456 

1 => id:456 
     parent_id:1723 

2 => id:1723 
     parent_id:0 

這樣:

array 
0 => id:1723 
     parent_id:0 

1 => id:456 
     parent_id:1723 

2 => id:1203 
     parent_id:456 

我從來沒有在PHP分類磁盤陣列之前。你會怎麼做?

謝謝

+0

所以,如果我理解正確的話,你想它進行排序,以便將PARENT_ID是前面的ID?你如何確定什麼應該是最初的ID來開始級聯? – WebChemist 2011-01-26 22:51:42

回答

0

我不明白你想用什麼標準來排序。無論如何,你可以使用uasort function,其中你傳遞一個自定義函數作爲參數,所以在這個函數中,你可以定義任何標準你想要排序你的數組。該函數將接收2個參數(要比較的2個變量),並且可以比較兩個parent_id(或者您想要比較的任何值)。要了解您的自定義函數應返回的內容,請檢查this out

通過使用uasort而不是usort,您可以保留您的數組索引(如您在示例中所述)。

1

這是做你想做的?

$arr = array(
    array('id' => 1203, 'parent_id' => 456), 
    array('id' => 456, 'parent_id' => 1723), 
    array('id' => 1723, 'parent_id' => 0) 
); 

function compare($a, $b) { 

    if ($a['parent_id'] == 0) return -1; 
    if ($b['parent_id'] == 0) return 1; 

    if ($a['id'] == $b['parent_id']) return -1; 
    if ($b['id'] == $a['parent_id']) return 1; 

    return 0; 
} 

usort($arr, 'compare'); 

print_r($arr); 

輸出:

Array 
(
    [0] => Array 
     (
      [id] => 1723 
      [parent_id] => 0 
     ) 

    [1] => Array 
     (
      [id] => 456 
      [parent_id] => 1723 
     ) 

    [2] => Array 
     (
      [id] => 1203 
      [parent_id] => 456 
     ) 

)