Проверьте, находятся ли значения в массиве в другом массиве - PullRequest
0 голосов

Я работаю над фильтром для страницы 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
)

Item1:

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

В результате $pasaColor=false

Item2:

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

Это приводит к $pasaColor=true

В item1 результат, который я получаю, означает, что значение «yellow» не может быть найдено в массиве, который фактически содержитзначение «желтый».

И пока мы на нем, есть ли более простой способ сделать это?

1 Ответ

0 голосов

Я нашел проблему.В каждом цикле на foreach мой логический тип будет перезаписан, так что в конце будет похоже, что только последний элемент был проверен.

Я добавил еще один логический, чтобы предотвратить это.

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;           
        }
    }
}  

Как ясказал ранее, если кто-нибудь знает, как лучше справиться с этим, пожалуйста, поделитесь, я был бы очень признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...