2013-03-01 124 views
2

我有解析“条目的嵌套数组中的函数:PHP的foreach循环用一个单一的元素

$data = Array(
    [date] => 'date' 
    [entry] => Array(
     [0] => Array(
     [Title] => 'title0' 
     [Price] => 'price0' 
    ) 
     [1] => Array(
     [Title] => 'title1' 
     [Price] => 'price1' 
    ) 
    ) 
) 

通过这个具有foreach($data['entry'] as $entry){循环,如果有多个条目的伟大工程。但是,它只有一个条目我服务:

$data = Array(
    [date] => 'date' 
    [entry] => Array(
     [Title] => 'title' 
     [Price] => 'price' 
    ) 
) 

而foreach循环失败。

是否有一个优雅的方式来编写一个foreach,它将抓取每个条目[0],条目[1]子数组(如同普通条目),或者如果只有一个条目并且抓取整个“条目”数组呢?


附录:我做的项目的东西是相当参与...我认为我可以分开了这一点成不同的功能,做一个if(is_array)检查然后一旦调用函数,或对于每一个...但这似乎不雅...

回答

2

技术上讲,你不需要$临时变量的一步。

$data['entry'] = isset($data['entry'][0]) ? $data['entry'] : array($data['entry']); 
+0

不错 - 而且更优雅。 – Alltheprettyhorses 2013-03-01 04:25:12

2

最好的方法是创建一个基于键的数组,即使只有一个。

像这样:

$data = Array(
    [date] => 'date' 
    [entry] => Array(
     [0] => Array(
     [Title] => 'title0' 
     [Price] => 'price0' 
    ) 
    ) 
) 
+0

同意,但是我没有在单次入境数据是如何提供给我的控制...有一个简单的方法把它轻推到一个,如果它是不是已经? – Alltheprettyhorses 2013-03-01 02:30:41

+0

将子数组重建为预期的格式。 – MECU 2013-03-01 03:28:29

0

这是因为你这样定义的结构多维数组:

entry = array(array())

在第二种情况,你只申报entry = array()

思考:

if(is_array(entry[0])) ...

+0

是的,这正是我的观点......如果(is_array)是一种解决方法,但不够高雅(正如我在附录中已经指出的那样)。 – Alltheprettyhorses 2013-03-01 02:32:23

0
if(!isset($data['entry']['0'])){ 
    $temp = $data['entry']; 
    unset($data['entry']); 
    $data['entry']['0'] = $temp; 
} 
foreach($data['entry'] as $entry) ... 

不太 “优雅”,但它的工作原理...