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我已经用完整的测试代码更新了我的答案,你可以根据需要更改,因为我不知道你的全部数据嘿。。你能给我解释一下你写的代码吗。。我想知道我犯了什么错误。。几天以来,我一直试图破解这个问题,但没有任何结果。。