Глядя на вашу кодировку JSON, я вижу, что ваш options объект в левом нижнем углу является объектом, который содержит свойство cart , которое является массивом. Ваш options объект в правом нижнем углу является объектом, который содержит свойство cart , которое является объектом , который содержит свойство для каждого числового индекса.
Я не совсем уверен, но я думаю, что проблема может быть в том, что array_filter функция сохраняет ключи массива :
Если функция обратного вызова возвращает TRUE, текущее значение из массива возвращается в массив результатов. Ключи массива сохранены.
Я предлагаю вам попробовать какой-то подход, который не пытается сохранить ключи массива, чтобы ваш фильтрованный массив имел непрерывные числовые значения.
public function destroy( $id, Request $request )
{
foreach($this->user->options->cart as $key => $cart_item) {
if ($cart_item->product_id == $id) {
unset($this->user->options->cart[$key]);
}
}
$user->save() ;
return response()->json( $user , 200 ) ;
}
РЕДАКТИРОВАТЬ: я не знаком с деталями вашей реализации (я не знаю, какой тип объекта $ user или что может делать $ user-> save или $ response-> json ()), но этот код удалить элемент массива по product_id:
$arr = array(
(object)["product_id" => 819, "name" => "I am 819"],
(object)["product_id" => 820, "name" => "I am 820"],
(object)["product_id" => 821, "name" => "I am 821"],
(object)["product_id" => 822, "name" => "I am 822"]
);
foreach($arr as $key => $v) {
if ($v->product_id == 820) {
unset($arr[$key]);
}
}
var_dump($arr);