我有以下两个数组:
Array One
Array ( [0] => WP_Term Object ( [term_id] => 36 [name] => Fractions [slug] => fractions-cat [term_group] => 0 [term_taxonomy_id] => 36 [taxonomy] => emp_unit_name [description] => [parent] => 0 [count] => 11 [filter] => raw [term_order] => 0 )
[1] => WP_Term Object ( [term_id] => 38 [name] => Geometry [slug] => geometry [term_group] => 0 [term_taxonomy_id] => 38 [taxonomy] => emp_unit_name [description] => [parent] => 0 [count] => 2 [filter] => raw [term_order] => 0 )
)
数组二
Array ( [0] => WP_Term Object ( [term_id] => 36 [name] => Fractions [slug] => fractions-cat [term_group] => 0 [term_taxonomy_id] => 36 [taxonomy] => emp_unit_name [description] => [parent] => 0 [count] => 11 [filter] => raw [term_order] => 0 ) )
我正在尝试比较两个数组,以确定[term_id]值是否匹配:
$match = array_intersect($array_one_ids, $array_two_ids);
if( count($match) > 0) { echo 'we have a match!'; }
我的问题是,如何在上述每个数组中创建只有$array_one_ids
值的数组(由$array_two_ids
和term_id
定义),以便$array_one_ids
= array(36, 38)
和$array_two_ids
会= array(36)
?
答案 0 :(得分:2)
您可以在每个输入数组上使用array_column
将它们转换为term_id
的数组。
$match = array_intersect(
array_column($arrayOne, 'term_id'),
array_column($arrayTwo, 'term_id')
);
对于array_column
不处理对象数组的旧版PHP,您可以使用array_map
来提取该属性。
$match = array_intersect(
array_map(function($term) { return $term->term_id; }, $arrayOne),
array_map(function($term) { return $term->term_id; }, $arrayTwo)
);
另外,您不必计算$match
来检查结果,因为数组在if条件下评估为true
或false
,具体取决于它是否为&#39} ;空的。 (See "converting to boolean"。)
if ($match) { echo 'we have a match!'; }
答案 1 :(得分:1)
如果您不需要整个WP_Term
对象,则可以在检索时将fields
参数添加到查询中,以仅检索术语的ID。
例如:
$queryOne = new WP_Term_Query(array(
'taxonomy' => 'emp_unit_name',
... // The other args of your query,
'fields' => 'ids'
));
然后您可以访问ID($query->terms
):
array(36, 38);
一旦有了这两个查询,你就可以:
$match = array_intersect($queryOne->terms, $queryTwo->terms);
但是,如果你需要整个对象,你可以像@Don't Panic的答案那样做。