Laravel交换集合中的位置 - 多维数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel交换集合中的位置 - 多维数组相关的知识,希望对你有一定的参考价值。
以下是集合中的数组:
array:1 [▼
"online" => array:2 [▼
"IS-003" => array:19 [▼
"product" => Product {#831 ▶}
"quantity" => 1
"payment-option" => "online"
]
"HA4" => array:19 [▼
"product" => Product {#822 ▶}
"quantity" => 1
"payment-option" => "online"
]
]
]
每当用户更改payment-option
时,相应的上述数组应该更改。
例如,如果HA4['payment-option']
从online
更改为cod
,那么父数组中应该有2个数组。以下是我想要的数组。
array:2 [▼
"online" => array:1 [▼
"IS-003" => array:19 [▼
"product" => Product {#831 ▶}
"quantity" => 1
"payment-option" => "online"
]
]
"cod" => array:1 [▼
"HA4" => array:19 [▼
"product" => Product {#822 ▶}
"quantity" => 1
"payment-option" => "cod"
]
]
]
到目前为止我尝试过的东西却无法获得理想的结果:
$paymentOptionCart = collect();
foreach ($cart as $paymentType => &$details) {
foreach ($details as $c => $p) {
if ($c == $code) {
$details[$c]['payment-option'] = $request->option;
$paymentOptionCart->put($paymentType, $details);
unset($details[$c]);
}
}
}
在执行上面的代码时,除了payment-option
更新为cod
之外没有任何反应。
我知道我在某个地方犯了一个愚蠢的错误,但我无法确定在哪里和如何。
有人可以帮帮我吗?
答案
这应该做你的任务:
$array = [
"online" => [
"IS-003" => [
"quantity" => 1,
"payment-option" => "online"
],
"HA4" => [
"quantity" => 1,
"payment-option" => "online"
]
]
];
$code = "HA4";
$request_option = "cod";
foreach ($array as $paymentType => $details) {
foreach ($details as $c => $p) {
if ($c == $code) {
$array[$request_option][$c] = $p;
$array[$request_option][$c]["payment-option"] = $request_option;
unset($array[$paymentType][$c]);
}
}
}
另一答案
unset($details[$c])
似乎是问题......这会在第一次迭代结束时在索引0处打出元素 - 然后索引1应该成为索引0,随后在下一次迭代期间无法在索引1处访问循环。只需运行循环直到满足退出条件,然后将它们全部取消设置,而不是在循环期间...或循环向后,以保持索引完整;这将首先取消设置最后一个元素,并且循环不会超过数组边界。
在一个在线订单中有两个不同的付款选项是一个不太可能的例子,还没有看到这个。人们可能宁愿发布两个订单(这意味着,不仅业务逻辑存在缺陷,而且阵列结构还有一个令人遗憾的设计,需要这样的混乱)。
xdebug非常适合了解正在发生的事情。即使我的答案可能无法回答代码中的问题,也可以复制和粘贴(这不是我的工作),xdebug会告诉你究竟是什么问题。
以上是关于Laravel交换集合中的位置 - 多维数组的主要内容,如果未能解决你的问题,请参考以下文章