in_array 다중값

다음과 같은 여러 값을 확인하려면 어떻게 해야 합니까?

$arg = array('foo','bar');
if(in_array('foo','bar',$arg)) 

그건 예니까 네가 좀 더 잘 이해할 수 있을 거야, 안 될 거 알아.



질문에 대한 답변



목표물과 건초 더미를 교차하고 교차로 수가 목표물의 수와 동일한지 확인합니다.

$haystack = array(...);
$target = array('foo', 'bar');
if(count(array_intersect($haystack, $target)) == count($target)){
// all of $target is in $haystack } 

결과 교점의 크기가 목표값 배열과 동일한지 확인만 하면 다음과 같이 됩니다.$haystack의 슈퍼셋이다.$target.

에서 적어도1개의 값이 설정되어 있는지 확인합니다.$target에도 있다$haystack, 다음의 체크를 실행할 수 있습니다.

 if(count(array_intersect($haystack, $target)) > 0){
// at least one of $target is in $haystack
} 



배열을 검색하여 여러 값을 검색하면 다음과 같이 설정된 작업(차이 설정 및 교차 설정)에 해당합니다.

질문에서 원하는 어레이 검색 유형을 지정하지 않았기 때문에 두 가지 옵션을 모두 제공합니다.

모든 바늘이 존재한다.

function in_array_all($needles, $haystack) {
return empty(array_diff($needles, $haystack)); }
$animals = ["bear", "tiger", "zebra"]; echo in_array_all(["bear", "zebra"], $animals); // true, both are animals echo in_array_all(["bear", "toaster"], $animals); // false, toaster is not an animal 

바늘이 하나라도 있다.

function in_array_any($needles, $haystack) {
return !empty(array_intersect($needles, $haystack)); }
$animals = ["bear", "tiger", "zebra"]; echo in_array_any(["toaster", "tiger"], $animals); // true, tiger is an amimal echo in_array_any(["toaster", "brush"], $animals); // false, no animals here 

중요한 고려 사항

찾고 있는 바늘 세트가 작고 사전에 알려진 경우 논리 체인을 사용하는 것만으로 코드가 명확해질 수 있습니다.in_array예를 들어 다음과 같습니다.

$animals = ZooAPI.getAllAnimals(); $all = in_array("tiger", $animals) && in_array("toaster", $animals) && ... $any = in_array("bear", $animals)
in_array("zebra", $animals)
... 



if(in_array('foo',$arg) && in_array('bar',$arg)){
//both of them are in $arg }
if(in_array('foo',$arg)
in_array('bar',$arg)){
//at least one of them are in $arg } 



건초더미에 바늘이 있는지 확인하기 위해 @Rock Kralj answer(최고의 IMO)에서 벗어나면 사용할 수 있습니다.(bool)대신!!코드 리뷰 중에 혼란스러울 수 있습니다.

function in_array_any($needles, $haystack) {
return (bool)array_intersect($needles, $haystack); }
echo in_array_any( array(3,9), array(5,8,3,1,2) ); // true, since 3 is present echo in_array_any( array(4,9), array(5,8,3,1,2) ); // false, neither 4 nor 9 is present 

https://glot.io/snippets/f7dhw4kmju




IMHO 마크 엘리엇의 솔루션은 이 문제에 대한 최선의 해결책입니다.PHP 5.3을 사용하는 어레이 요소 간에 더 복잡한 비교 작업을 수행해야 하는 경우 다음과 같은 사항을 고려할 수도 있습니다.

<?php
// First Array To Compare $a1 = array('foo','bar','c');
// Target Array $b1 = array('foo','bar');
// Evaluation Function - we pass guard and target array $b=true; $test = function($x) use (&$b, $b1) {
if (!in_array($x,$b1)) {

$b=false;
} };
// Actual Test on array (can be repeated with others, but guard
// needs to be initialized again, due to by reference assignment above) array_walk($a1, $test); var_dump($b); 

이것은 폐쇄에 의존합니다. 비교 기능은 훨씬 더 강력해질 수 있습니다.행운을 빕니다.