Php Laravel交换集合中的位置-多维数组
以下是集合中的数组:Php Laravel交换集合中的位置-多维数组,php,arrays,laravel,multidimensional-array,laravel-5.4,Php,Arrays,Laravel,Multidimensional Array,Laravel 5.4,以下是集合中的数组: array:1 [▼ "online" => array:2 [▼ "IS-003" => array:19 [▼ "product" => Product {#831 ▶} "quantity" => 1 "payment-option" => "online" ] "HA4" => array:19 [▼ "product" => Product {#8
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"
]
]
]
每当用户更改支付选项时
,上述数组应相应更改
例如,如果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]);
}
}
}
在执行上述代码时,除了付款选项
更新为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也会准确地告诉您问题所在。$paymentOptionCart->put($paymentType,$details)代码>,
$paymentType
您当前的paymentType是吗?因此,如果不这样做,这是有道理的move@KendrickKesley即使我做了$request->option
,它也不会改变。。我不知道为什么..我只是确认您是否在$paymentType
中更改了$paymentOptionCart->put($paymentType,$details)代码>至$request->option
。您将获得与使用$paymentOptionCart->put($paymentType,$details)时相同的结果代码>?请向我们展示您第一次获取阵列的方式place@KendrickKesley是的,我确实得到了相同的结果。这里$array
是您首先给出的数组,我已经测试过了,应该是这样的work@SaiyanPrince我已经用完整的测试代码更新了我的答案,你可以根据需要更改,因为我不知道你的全部数据嘿。。你能给我解释一下你写的代码吗。。我想知道我犯了什么错误。。几天以来,我一直试图破解这个问题,但没有任何结果。。