$cart_array = .....;
Array
(
[0] => item Object([id] => 123 [size_id] => 2)
[1] => item Object([id] => 123 [size_id] => 3))
$cart_array = array_filter(
$cart_array,
function ($item) {
return $item->id != 123 && $item->size_id != 2;
}
);
预期结果:
Array
(
[0] => item Object([id] => 123 [size_id] => 3))
但是这会返回一个空数组($ cart_array)。任何帮助都会很明显。谢谢。
答案 0 :(得分:2)
这是因为$cart_array
中的两个项目都未通过测试。
<?php
$cart1 = new StdClass;
$cart1->id = 123;
$cart1->size_id = 2;
$cart2 = new StdClass;
$cart2->id = 123;
$cart2->size_id = 3;
$cart_array = array_filter(
[$cart1, $cart2],
function ($item) {
// Items both have an id of 123, therefore this returns false
return $item->id != 123 && $item->size_id != 2;
}
);
也许你想保持3号尺寸?
$cart_array = array_filter(
[$cart1, $cart2],
function ($item) {
// This will keep $cart2 since it has an id of 123 and a size_id not equal to 2 but remove $cart1 since size_id is equal to 2
return $item->id == 123 && $item->size_id != 2;
}
);
答案 1 :(得分:0)
如果你打印你的阵列会有什么结果?如果您在问题中输入的代码与您尝试运行的代码相同,那么您的一个问题是数组项之间没有逗号(,),并且需要。像这样:
Array
(
[0] => item Object([id] => 123 [size_id] => 2),
[1] => item Object([id] => 123 [size_id] => 3)
)
我不熟悉你正在使用的'item Object(...'语法),所以除了我已经说过的内容之外我不会有太多帮助。
此外,与上面的答案一样,您的测试会排除这两个对象,因为两者上的ID都是123。