按编号对循环内的php数组进行排序

时间:2013-04-04 09:41:04

标签: php arrays loops

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

我有一个循环的数组。在该数组中有名称和顺序。我想按数字顺序显示它们,如何才能打印出最低编号的项目列表,然后是第二个等?

2 个答案:

答案 0 :(得分: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

希望这会有所帮助:)

答案 1 :(得分: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
    }
}

这样做的好处是,如果您要排序的其他属性可以执行此操作。例如,如果两个人的“位置”机会相同,那么您可以按名称等字母顺序排序。

Codepad上的完整解决方案,两个答案比较: http://codepad.viper-7.com/5yJ72S