嗨,我有这个对象数组
[
{
"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
]
}
]
我想搜索"类别"其他数组中所有对象值的数组并打印匹配。
示例,我想搜索值222
和121
,我在数组中推送的值
$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有效但我只需要将包含值的对象打印到"搜索"阵列。考虑到"搜索"数组可以有两个以上的值
答案 0 :(得分:1)
array_intersect($array1, $array2)
将是真实的。您似乎只想在$search
中选择所有类别的项目。要测试它,您需要使用
if (count(array_intersect($item["categories"], $search)) == count($search))
另外,一般来说,写作没有意义
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);
});