我有一些循环遍历数组的代码,如果它的元素的数量大于1,则将该元素复制到与qty一样多的元素中,然后将所有元素的数量设置为1 (并进行一些其他更改。)
我已经盯着这个很长一段时间了,我相信我一定会错过一些明显的东西,因为我不能为了我的生活而改变我想要改变的价值观。
以下是基本代码:
foreach ($items as $id => $itm) {
// if there's an item that has a qty > 1, need to split out into multiple nodes with qty = 1
if ($itm['qty'] > 1) {
$qtyCount = $itm['qty'];
$newItems = array_fill($id, $qtyCount, $itm);
foreach ($newItems as $newId => $n) {
$n['qty'] = 1;
$n['deal_id'] = $newId;
}
error_log("new items");
error_log(print_r($newItems,1));
}
}
我开始的是一个看起来像这样的数组:
[items] => Array
(
[0] => Array
(
[product] => AW8B
[qty] => 1
[subtotal] => 6.500
[deal_id] =>
)
[1] => Array
(
[product] => C
[qty] => 3
[subtotal] => 30.000
[deal_id] => 1
)
[2] => Array
(
[product] => QUEPAP
[qty] => 1
[subtotal] => 4.000
[deal_id] =>
)
)
在这种情况下,只有原始项目数组中的元素1符合qty>的标准。 1,所以代码应该创建一个包含三个相同元素的新数组。然后foreach($newItems as $newId => $n)
循环应循环遍历新的3元素数组,并将每个元素的qty元素设置为1,将deal_id元素设置为循环索引。我期望error_log(print_r($newItems,1))
行返回的内容如下所示。
[newItems] => Array
(
[1] => Array
(
[product] => C
[qty] => 1
[subtotal] => 30.000
[deal_id] => 1
)
[2] => Array
(
[product] => C
[qty] => 1
[subtotal] => 30.000
[deal_id] => 2
)
[3] => Array
(
[product] => C
[qty] => 1
[subtotal] => 30.000
[deal_id] => 3
)
)
但是,即使在内部foreach
循环运行之后,qty仍为3并且所有这些的deal_id仍为1。这让我起了墙,因为我不是新手,而且以前做过这种事。只是不能为我的生活找出我在这里做错了什么。
答案 0 :(得分:1)
答案 1 :(得分:1)
我会以Leonardo
显示,但替代:
foreach ($newItems as $newId => $n) {
$newItems[$newId]['qty'] = 1;
$newItems[$newId]['deal_id'] = $newId;
}