检查数组中的值是否在其他数组中

时间:2018-05-21 10:40:05

标签: php arrays comparison

我正在使用wordpress页面的过滤器,我在尝试使用多个值时遇到了麻烦。

这个想法是使用布尔值来显示或不显示项目。每个项目使用ACF来获取各种字段,在这种情况下是颜色。

    if( isset($colores) ){
        foreach($colores as $color){
            if( in_array ( $color, get_field( 'color', get_the_ID() ) ) ){//Matches the filter
                $pasaColor = true;              
            }else if($color == null){//Not specified in the filter
                $pasaColor= true;               
            }else{//doesn't match the filter
                $pasaColor= false;              
            }
        }
    }  

如果$colores只有一个元素,则可行:

(
    [0] => yellow        
)

我将它与每个项目的值进行比较:

(
    [0] => yellow        
    [1] => red
    [2] => blue
)

结果为:$pasaColor=true

(          
    [1] => red
    [2] => blue
)

这导致:$pasaColor=false

但是如果过滤器提供多个元素,则只有最后一个元素保持为真。

过滤器:

(
    [0] => yellow        
    [1] => azul
)

项目1:

    (
    [0] => yellow        
    [1] => red
    [2] => pink
)

这导致$pasaColor=false

项目2:

(
    [0] => blue
    [1] => red
    [2] => pink
)

这导致$pasaColor=true

在item1中,我得到的结果意味着在实际包含值“yellow”的数组中找不到值“yellow”。

虽然我们在这里,有没有更简单的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

我发现了问题。在foreach上的每个cicle上,我的布尔值都会被覆盖,所以最后就像只检查了最后一个元素。

我添加了另一个布尔值来防止这种情况。

if( isset($colores) ){
    foreach($colores as $color){
        if( in_array ( $color, get_field( 'color', get_the_ID() ) ) ){//Matches the filter
            $pasaColor = true;    
            $itempasa = true;
        }else if($color == null){//Not specified in the filter
            $pasaColor= true;     
            $itempasa = true;                  
        }else if($itempasa==false){//doesn't match the filter
            $pasaColor= false;   
            $itempasa = false;           
        }
    }
}  

如前所述,如果有人知道更好的处理方法请分享,我会非常感激。