foreach ($packagetray as $tray) {
$bIds = explode(',', $tray['box_ids']);
$tmp = array_intersect($bIds, $boxsId);
if (!empty($tmp)) {
$tray['box_ids']=$bIds;
$skuTrays[] = $tray;
}
}
foreach ($packagetray as $tray) {
$bIds = explode(',', $tray['box_ids']);
$tmp = array_intersect($bIds, $boxsId);
if (!empty($tmp)) {
$skuTrays[] = $tray;
}
}
两段代码,唯一的差别是这一句 $tray['box_ids']=$bIds; $tray['box_ids']本来就是字符串,第一段报错,第二段不报错。explode() expects parameter 2 to be string, array given
按理说 foreach 会更新$tray,每次取出来的是新的 tray,这时候应该不会有问题的,但是第一段就是报错
1
atroy 2018-11-20 17:44:02 +08:00
估计根源在 $packagetray
打印出来就可以发现了。 下面的测试代码是没有报错的 ``` error_reporting(E_ALL); $packagetray = array( array( 'box_ids' => '1, 11, 11, 111, 1111', 'boxs' => 'box mix 1' ), array( 'box_ids' => '2, 22, 222, 2222', 'boxs' => 'box mix 2' ), array( 'box_ids' => '3, 33, 333, 3333, 33333, 3333333', 'boxs' => 'box mix 3' ), ); foreach ($packagetray as $tray) { $bIds = explode(',', $tray['box_ids']); $tray['box_ids'] = $bIds; } ``` |
2
AngryPanda 2018-11-20 17:46:46 +08:00
$tray['box_ids']=$bIds;
这句之后,$tray['box_ids'] 就是 array 了 |
3
atroy 2018-11-20 17:54:06 +08:00
@AngryPanda 嗯,这个 foreach as 后面的可以看作是一个临时变量,循环一次后,each 前面的那个数组指针就会下移,然后值重新复制给这个临时变量上。
所以这个$tray['box_ids'] 理论上在下一次循环后就被重新覆盖了。 lz 的代码看不出什么意义,但这个确实能加深对 foreach 的理解。 |
4
VgV 2018-11-21 01:05:26 +08:00
执行了 1 楼的代码没有提示错误,是不是 PHP 版本问题??
|