循环遍历foreach php

时间:2017-10-23 09:05:14

标签: php arrays for-loop

我试图在foreach循环中遍历一行的列,为每一行创建一个新数组。

$e = 1;
$columns = array('colname1', 'colname2', 'colname3', 'colname4','colname5');
foreach ($variable as $row) {
  for ($i=1; $i < 5;)
  {
      $new_array[$i] = (
      array(
          'id' => NULL,
          'order_line_id' => $order_line_id,
          'size' => $e,
          'qty' => $row->$columns[$i] //error is here
          )
      );
      $i++;
      $blank_detail[$i] = (
      array(
          'id' => NULL,
          'order_line_id' => $order_line_id,
          'size' => $e."-",
          'qty' => $row->$columns[$i] //error is here
          )
      );
      $e++;
  };
}

是否有更好/更有效的方法来执行此操作,还是仅仅是语法错误?

1 个答案:

答案 0 :(得分:2)

您使用的数组为variable variable,因此您需要更改此行:

'qty' => $row->$columns[$i]

'qty' => $row->{$columns[$i]}

在PHP7和PHP5 check it out之间处理间接变量时也有很多变化。

  

现在可以间接访问变量,属性和方法   严格按照从左到右的顺序进行评估,而不是之前的   混合特殊情况。下表显示了顺序如何   评估已经改变。

因此,如果您在PHP5中使用此语法'qty' => $row->$columns[$i],这将意味着PHP将解释您的代码并从$i数组中获取$column索引,而在PHP7中则是解释器将解释您的代码并从$i数组中获取$row->$columns索引,这将导致错误,因为:
1 - $columns是一个数组,你试图访问非法索引类型 2 - 即使$columns是有效的索引类型(字符串),此索引也没有$i元素。

我也非常确定您可以使用array_combine而不是执行两个嵌套循环