用数字排序foreach循环

时间:2014-04-08 08:53:08

标签: php sorting foreach opencart

在opencart中,我正在开发管理面板。

我想表明,十大商店及其各自的访问。

目前,我在表格中有这些信息,我的php循环就是这个。

  <?php foreach ($stores as $store) { ?>
    <?php echo $store['name']?>
    <?php echo number_format($store['visitor'])?>
  <?php } ?>

这会使数据一团糟,但数据就在那里!

Alesso 20
爱丽丝在链中32 艾米怀恩豪斯27
Avenged Sevenfold 136
Axewound 30
Axwell 6
后街男孩24

等等......大约有100家不同的商店。

我想知道的是,在foreach循环中,我希望只显示10个商店。 访问次数最多的顶级商店,现在我有数据,但我如何在foreach中排序,只显示前10名?

非常感谢 肖恩

2 个答案:

答案 0 :(得分:2)

您可以使用array_multisort

根据您的代码进行更新:

$limit=10;  
foreach ($stores as $key => $row) {
  $store[$key]  = $row['name'];
  $visitor[$key] = $row['visitor'];
}

array_multisort($visitor, SORT_DESC, $store, SORT_ASC, $stores);

$stores = array_chunk($stores, $limit);

foreach ($stores as $store) {
  echo $store['name'];      
  echo number_format($store['visitor']);        
}  

答案 1 :(得分:1)

你有几个解决方案:

它应该是这样的:

function cmp($a, $b)
{
    if ($a['visitor'] == $b['visitor']) {
        return 0;
    }
    return ($a['visitor'] < $b['visitor']) ? -1 : 1;
}

usort($store, "cmp");

$storeIndex= 0;
while($storeIndex< 10) {
        echo $store[storeIndex]['name'];
        echo number_format($store[storeIndex]['visitor']);

$storeIndex++;
}