在Array of Object PHP中查找值

时间:2017-01-19 00:54:01

标签: php arrays

嗨,我有这个对象数组

[
  {
    "id": 1,
    "categories": [
      222,
      243,
      208,
      115,
      173,
      253,
      236,
      121,
      69,
      250,
      221,
      270,
      245,
      123,
      124
    ]
},
{
    "id": 2,
    "categories": [
      222,
      243,
      208,
      69,
      250,
      221,
      270,
      245,
      123,
      124
    ]
},{
    "id": 8774,
    "categories": [
      222,
      243,
      208,
      115,
      173,
      253,
      236,
      121
    ]
}
]

我想搜索"类别"其他数组中所有对象值的数组并打印匹配。

示例,我想搜索值222121,我在数组中推送的值

$array = ("222","121");

我希望在结果中搜索这两个值,并且只打印对象id = 1和8774,因为它们是重合的。

我使用array_filter测试了foreach但是doenst工作!任何的想法?感谢

这是我的代码

    $search = array("231","228");
    $result = array_filter($array, function ($item) use ($search) {
        if (array_intersect($item["categories"], $search)) {
            return true;
        }
        return false;
    });
//$array is the array of object result

Array_intersect有效但我只需要将包含值的对象打印到"搜索"阵列。考虑到"搜索"数组可以有两个以上的值

1 个答案:

答案 0 :(得分:1)

如果两个数组之间存在任何匹配,则

array_intersect($array1, $array2)将是真实的。您似乎只想在$search中选择所有类别的项目。要测试它,您需要使用

if (count(array_intersect($item["categories"], $search)) == count($search))

DEMO

另外,一般来说,写作没有意义

if (condition) {
    return true;
} else {
    return false;
}

只需写下:

return condition;

所以看起来像:

$result = array_filter($array, function ($item) use ($search) {
    return count(array_intersect($item["categories"], $search)) == count($search);
});