我试图在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++;
};
}
是否有更好/更有效的方法来执行此操作,还是仅仅是语法错误?
答案 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而不是执行两个嵌套循环