当循环到数组的数组时,PHP避免双重foreach

时间:2013-06-12 17:04:10

标签: php foreach

我有这种阵列:

Array ( [data] => Array ( [0] => Array ( [name] => Lskdjlkdsfj [start_time] => 2013-06-12 [timezone] => Europe/Rome [location] => Rome, Lazio [id] => 592087844156650 [rsvp_status] => attending ) ) [paging] => Array ( [previous] => https://graph.facebook.com/100004042705860/events?limit=25&since=1370995200&__paging_token=592087844156650&__previous=1 [next] => https://graph.facebook.com/100004042705860/events?limit=25&until=1370995200&__paging_token=592087844156650 ) ) 

要获取我正在执行的数据:

    foreach ($fb_events as $data) {
    foreach ($data as $fb_event_data) {
        echo $fb_event_data['name'];
        echo $fb_event_data['start_time'];
    }
}

使用双foreach这是最好的方法吗?有没有更好的方法循环到数组的数组? 这个是有效的。我只是想知道我是否以“正确”的方式做到了这一点!

3 个答案:

答案 0 :(得分:3)

虽然使用嵌套循环没有任何问题。在某些情况下,您可能希望以更优雅的方式解决循环问题。看看PHP的RecursiveArrayIteratorRecursiveIteratorIterator类。

$foo = array(
    'data' => array(
        'name' => 'Lskdjlkdsfj', 
        'start_time' => '2013-06-12', 
        'paging' => array(
            'previous' => 'some-url'
         )
     )
);

$it = new RecursiveIteratorIterator( new RecursiveArrayIterator($foo) );

foreach ($it as $key => $val) {
    echo $key . ":" . $val . "\n";
}

name:Lskdjlkdsfj
start_time:2013-06-12
previous:some-url

答案 1 :(得分:1)

嵌套循环不比嵌套数组更“正确”或“错误”。也就是说,它完全取决于您的数据及其含义。

如果您最终得到五个级别的嵌套循环,您可能需要重新考虑代码的结构。但我不认为嵌套的一个级别是 ipso facto 一个问题。

答案 2 :(得分:1)

如果顶级数组只有一个元素,那么这可以简化为

foreach ($fb_events["data"]  as $fb_event_data) {
    echo $fb_event_data['name'];
    echo $fb_event_data['start_time'];
}