我在PHP中有这个简单的数组$tree
,我需要根据与数组中匹配的标记数组进行过滤。
Array
(
[0] => stdClass Object
(
[name] => Introduction
[id] => 798162f0-d779-46b6-96cb-ede246bf4f3f
[tags] => Array
(
[0] => client corp
[1] => version 2
)
)
[1] => stdClass Object
(
[name] => Chapter one
[id] => 761e1909-34b3-4733-aab6-ebef26d3fcb9
[tags] => Array
(
[0] => pro feature
)
)
)
我尝试使用像这样的匿名函数:
$selectedTree = array_filter($tree, function($array) use ($selectedTags){
return in_array($array->tags, $selectedTags, true);
});
$ selectedTags:
Array
(
[0] => client corp
)
当我希望返回第1项时,上面的内容将返回空白。没有错误抛出。我错过了什么?
答案 0 :(得分:2)
如果是in_array($neddle, $haystack)。 $neddle
必须是String
,但您提供的数组就是其行为不正常的原因。
但是如果您想将数组作为$selectedTags
的值传递,那么您可以尝试下面的内容:
$selectedTree = array_filter($tree, function($array) use ($selectedTags){
return count(array_intersect($array->tags, $selectedTags)) > 0;
});
答案 1 :(得分:2)
如果我正确地阅读了这个问题,你需要查看$tree
数组中的每个对象,看看tags属性是否包含$selectedTags
这是一种程序化的方法。
$filtered = array();
foreach ($tree as $key => $obj) {
$commonElements = array_intersect($selectedTags, $obj->tags);
if (count($commonElements) > 0) {
$filtered[$key] = $obj;
}
}
我还要发布这样做的功能方法但是,请参阅codeparadox对该实现的回答。