从对象中删除匹配项

时间:2015-07-24 18:50:59

标签: php

我有一个名为$ list的对象,格式如下

{"name":"cats","title":"Cats"},{"name":"dogs","title":"Dogs"},{"name":"rabbits","title":"Hares"}

我有一个名为$ list2的第二个对象,格式如下:

{"title":"Cats","name":"cats"},{"title":"Dogs","name":"dogs"},{"title":"Pigs","name":"pigs"},{"title":"Funny","name":"funny"},{"title":"Pictures","name":"pictures"},{"title":"Finance","name":"finance"},{"title":"Cars","name":"cars"},

我想浏览$ list并检查它是否在$ list2中。如果名称项目在$ list2的名称项目中,那么我想将其从$ list中删除。在这种情况下的预期结果将是

{"name":"rabbits","title":"Hares"}

我尝试了一些不同的循环技术,但我似乎无法正确匹配。

1 个答案:

答案 0 :(得分:2)

您正在寻找的是内置的array_udiff()功能。它通过您提供的函数找到数组中的差异。

$result = array_udiff($list1, $list2, function($a, $b) {
    return strcasecmp($a['name'], $b['name']);
});

因此,这将返回不在$list2但在$list1中的所有对象。我假设这个名字决定了唯一性。