我有一个数组$categories
,我想检查阵列中是否有“计算机”或“笔记本电脑”。
我能做到
$terms = wp_get_post_terms($post_id, 'product_cat');
foreach ($terms as $term) {
$categories[] = $term->slug;
}
if (in_array( 'computers', $categories)) {
//run a lot of code
}
if (in_array('laptops', $categories)) {
//run a lot of code
}
但有没有办法与OR结合,所以我不必写两次代码?
类似
if ((in_array( 'computers', $categories)) OR (in_array('computers-he', $categories))) {
//run a lot of code
}
我尝试了但是它不起作用。
PHP警告:in_array()期望参数2为数组,null
答案 0 :(得分:4)
1。 定义
$categories = array();
前 -
$terms = wp_get_post_terms( $post_id, 'product_cat' );
2。 像这样使用||
: -
if(in_array('computers',$categories) || in_array('laptops',$categories)) {
//run a lot of code
}
现在完整的代码将是: -
$categories= array();
$terms = wp_get_post_terms( $post_id, 'product_cat' );
foreach($terms as $term) {
$categories[] = $term->slug;
}
if(in_array('computers',$categories) || in_array('laptops',$categories)) {
//run a lot of code
}
答案 1 :(得分:0)
一种不同的方法:
$terms = wp_get_post_terms($post_id, 'product_cat');
foreach ($terms as $term)
{
if(in_array($term->slug, ['computers', 'laptops']))
{
//run a lot of code
break; //run the code once
}
}
答案 2 :(得分:0)
我通常这样做:
female=2
如果if (array_intersect($categories, ['computers', 'laptops'])) {
//run a lot of code
}
中有一个或两个术语,则返回带有这些术语的数组,如果没有,则返回一个虚数据的空数组。
答案 3 :(得分:0)
从你的问题来看,如果至少有一个特定类别的术语,我想你需要运行代码。在这种情况下,您可以使用array_reduce
并利用short-circuit evaluation:
$criteria = [
'computers' => true,
'laptops' => true
];
$test = function ($carry, $term) use ($criteria) {
return $carry || isset($criteria[$term->slug]);
};
if (array_reduce($terms, $test, false)) {
echo 'Run a lot of code.';
}
这是working demo。