从数组中删除对象的PHP返回空数组

时间:2017-06-11 04:55:15

标签: php arrays array-filter

$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)。任何帮助都会很明显。谢谢。

2 个答案:

答案 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;
    }
);

此处示例:http://ideone.com/oqz16S

答案 1 :(得分:0)

如果你打印你的阵列会有什么结果?如果您在问题中输入的代码与您尝试运行的代码相同,那么您的一个问题是数组项之间没有逗号(,),并且需要。像这样:

Array
(
[0] => item Object([id] => 123 [size_id] => 2),
[1] => item Object([id] => 123 [size_id] => 3)
)

我不熟悉你正在使用的'item Object(...'语法),所以除了我已经说过的内容之外我不会有太多帮助。

此外,与上面的答案一样,您的测试会排除这两个对象,因为两者上的ID都是123。