在数组中搜索两个值

时间:2017-07-21 07:02:48

标签: php arrays

我有一个数组$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

4 个答案:

答案 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