迭代数组并返回前10个结果

时间:2016-09-15 06:30:54

标签: php json for-loop curl foreach

所以我试图遍历似乎是json feed的东西,我使用以下代码来获取所有数组结果,但是,如何返回特定项目,让我们说前6或10?

<?php 

$current_url = base64_encode($url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
$headers = array('Content-Type: application/json');
$url = 'https://weedmaps.com/api/web/v1/listings/green-valley-medicinal/menu?show_unpublished=false&type=dispensary';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch); 
curl_close($ch);
$menu_data = json_decode($result, true);
            foreach($menu_data['categories'] as $menu_item){
            foreach ($menu_item['items'] as $item) {
      echo '<article class="col-sm-6 col-md-4">';
      echo isset($item['image_url']) ? '<img class="media-object menu-item-photo" height="120" width="120" src="'.$item['image_url'].'">' : '<img class="media-object menu-item-photo" height="120" src="images/mmjicon.png">';
      echo '<h2>'.$item['name'].'</h2>';
      echo '<p>'.$item['body'].'</p>';
      echo '</article>';
      }
    }
    ?>

非常感谢任何帮助。干杯!

2 个答案:

答案 0 :(得分:0)

有多种方法可以做到这一点。

保持foreach循环,添加计数,递增计数,并在达到10时打破循环。

$count = 0;
foreach(...) {
    ...
    if (++$count >= 10) break;
}

答案 1 :(得分:0)

如果您无法控制正在检索的数据数量,您可以使用$ counter来表示您的foreach。

$your_limit = 6;
$counter = 0;
foreach($menu_data['categories'] as $menu_item){
    if ( ++$counter > $your_limit ){
        break;
    }        
    foreach ($menu_item['items'] as $item) {
      echo '<article class="col-sm-6 col-md-4">';
      echo isset($item['image_url']) ? '<img class="media-object menu-item-photo" height="120" width="120" src="'.$item['image_url'].'">' : '<img class="media-object menu-item-photo" height="120" src="images/mmjicon.png">';
      echo '<h2>'.$item['name'].'</h2>';
      echo '<p>'.$item['body'].'</p>';
      echo '</article>';
      }
    }