PHP Foreach循环使用单个元素

时间:2013-03-01 02:09:33

标签: php arrays 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)检查然后调用函数一次,或者每个..但那似乎不够优雅......

5 个答案:

答案 0 :(得分:2)

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

像这样:

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

答案 1 :(得分:2)

从技术上讲,您不需要$ temp变量步骤。

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

答案 2 :(得分:0)

这是因为你定义了一个像这个结构的多维数组:

entry = array(array())

在第二种情况下,您只声明了entry = array()

想一想:

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

答案 3 :(得分:0)

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

不太“优雅”,但它有效......

答案 4 :(得分:0)

试试这个对我有用

foreach ($data as $key => $value) {
            if (!is_numeric($key)) {
            //not multidimensional
                 $data1 = $data;                    
            } else {                   
                 $data1 = $value;
            }
            //do your stuff
            echo $data1;                        
}

最终你可以做一个递归函数