2013-04-04 51 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