3

我有一个函数可以解析嵌套数组中的“条目”:

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

foreach($data['entry'] as $entry){如果有多个条目,则用 a 循环遍历这个效果很好。但是,我只有一个条目:

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

并且 foreach 循环失败。

有没有一种优雅的方法来编写一个 foreach 来获取每个条目 [0]、条目 [1] 子数组(像正常一样),或者如果只有一个条目并获取整个“条目”数组,则返回一个级别?


附录:我在条目上所做的事情非常复杂......我想我可以把它分成一个不同的函数,做一个 if(is_array) 检查然后调用这个函数一次,或者每个......但是看起来不优雅……

4

5 回答 5

3

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

$data['entry'] = isset($data['entry'][0]) ? $data['entry'] : array($data['entry']);
于 2013-03-01T04:16:16.370 回答
2

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

像这样:

$data = Array(
   [date] => 'date'
   [entry] => Array(
      [0] => Array(
         [Title] => 'title0'
         [Price] => 'price0'
      )
   )
 )
于 2013-03-01T02:15:11.947 回答
0

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

entry = array(array())

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

想一想:

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

于 2013-03-01T02:17:28.937 回答
0
 if(!isset($data['entry']['0'])){
    $temp = $data['entry'];
    unset($data['entry']);
    $data['entry']['0'] = $temp;
 }
 foreach($data['entry'] as $entry) ...

不是很“优雅”,但它确实有效......

于 2013-03-01T03:13:04.413 回答
0

试试这个它对我有用

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

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

于 2021-01-21T09:44:52.833 回答