【问题标题】:PHP Foreach loop with a single element具有单个元素的 PHP Foreach 循环
【发布时间】:2013-03-01 02:09:32
【问题描述】:

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

$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) 检查然后调用该函数一次,或为每个...... . 但这似乎不优雅...

【问题讨论】:

    标签: php arrays foreach


    【解决方案1】:

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

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

    【讨论】:

    • 不错——而且更优雅。
    【解决方案2】:

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

    像这样:

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

    【讨论】:

    • 同意,但是我无法控制向我提供单项数据的方式...如果还没有,有没有一种简单的方法可以将其轻推成一个?跨度>
    【解决方案3】:
     if(!isset($data['entry']['0'])){
        $temp = $data['entry'];
        unset($data['entry']);
        $data['entry']['0'] = $temp;
     }
     foreach($data['entry'] as $entry) ...
    

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

    【讨论】:

      【解决方案4】:

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

      entry = array(array())

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

      想一想:

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

      【讨论】:

      • 是的,这正是我的观点... if(is_array) 是一种解决方法,但并不优雅(正如我在附录中已经指出的那样)。
      【解决方案5】:

      试试这个对我有用

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

      最终你可以创建一个递归函数

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-26
        • 2020-06-05
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多