2013-04-04 59 views
-1
<?php 
foreach ($jsonObj as $items) { 
foreach ($items["items"] as $itemlist){ 
// $itemlist['position']; I want them to echo in that order 
echo $itemlist['name']; 
} 
} 
?> 

我有一個數組,我循環。在該陣列中有名稱和順序。我想以數字順序顯示它們,我怎樣才能打印出最低編號的項目列表,然後是第二個等?按數字排序內部循環的php數組

+0

前第二次嘗試此foreach循環排序($ items [「items」]); – 2013-04-04 09:44:14

+0

我明白我必須使用某種排序。舉一個例子。我不明白的是在打印之前我沒有排序。 – 2013-04-04 09:44:42

+0

我不太確定我關注。 如果您沒有陣列,首先要如何打印它? – 2013-04-04 09:45:47

回答

1

對此,您可以使用usortcmp_function。試試這個功能:

function compare_position($a, $b) { 
    return $a['position'] - $b['position']; 
} 

然後,當你通過數組迭代:

foreach ($jsonObj as $items) { 
    usort($items['items'], "compare_position"); 
    foreach ($items["items"] as $itemlist){ 
     echo $itemlist['position']; 
     echo $itemlist['name']; 
    } 
} 

更多usort可以在這裏找到http://php.net/manual/en/function.usort.php

希望這有助於:)

+0

謝謝,你是一個好人。我現在明白了。一些邪惡的人寫了關於我的壞評論(現在刪除)......你對我說得很清楚。不只是代碼,但我明白我以前不瞭解的內容。 – 2013-04-04 10:04:22

+0

@BadrHari你應該看看我的答案 - 它提供了一個更靈活的解決方案,以及爲其他程序員更清楚發生的事情。 – deed02392 2013-04-04 10:10:51

1

您需要準備首先排序的陣列。然後排序然後通過引用進行排序,允許您第二次遍歷它,但這次按array_multisort()排序。

<?php 
foreach($jsonObj as $items) { 
    foreach($items['items'] as $key => $itemlist) { 
     $positions[$key] = $itemlist['position']; 
     $names[$key] = $itemlist['name']; 
    } 
    array_multisort($positions, SORT_ASC, $items['items']); 
    foreach($items['items'] as $itemlist) { 
     echo $itemlist['name'], "<br />"; 
     // Now in asc order of positions 
    } 
} 

這樣做的好處是,如果其他屬性出現,你想排序你可以做到這一點。例如,如果有一個機會,「位置」將是兩個人是相同的,然後你可以按字母順序排序他們的名字等等。

鍵盤背後

完整的解決方案,兩個答案相比: http://codepad.viper-7.com/5yJ72S