배열에 다른 배열의 모든 배열 값이 포함되어 있는지 PHP 확인


110
$all = array
(
    0 => 307,
    1 => 157,
    2 => 234,
    3 => 200,
    4 => 322,
    5 => 324
);
$search_this = array
(
    0 => 200,
    1 => 234
);

$ all에 모든 $ search_this 값이 포함되어 있고 true 또는 false를 반환하는지 확인하고 싶습니다. 제발 어떤 생각?



@VishalKumarSahu 중복되지 않음 : 주어진 링크는 모든 요소가 다른 배열에 포함되어 있는지가 아니라 다른 배열에 포함되어 있는지 확인하는 것과 관련이 있습니다.
Stefan

답변:


159

array_intersect () 보세요 .

$containsSearch = count(array_intersect($search_this, $all)) == count($search_this);

11
count()통화 를 모두 생략 할 수 있다는 것을 알고 있습니까?
Wrikken

1
@Wrikken 동안 값을 다시 정렬 할 수 없습니까 array_intersect()? 내 말은 ['a', 'b'] != ['b', 'a'].
sbichenko

4
그리고 심지어 배열 비교 : " ==$ a와 $ b가 동일한 키 / 값 쌍을 가지고 있으면 TRUE입니다." , 그래서 순서는 중요하지 않습니다 (사용 ===)
Wrikken

2
이 대답은 $ all 배열에 고유 값만 포함되어 있다고 가정합니다. 그렇지 않은 경우 array_intersects 함수의 $ all 배열에서 array_unique 함수를 사용할 수 있습니다.
Relequestual

5
준 array_diff 솔루션 @orrd 훨씬 청소기
조셉 코놀리

223

이전 답변은 모두 필요한 것보다 더 많은 작업을 수행하고 있습니다. array_diff를 사용하십시오 . 이것이 가장 간단한 방법입니다.

$containsAllValues = !array_diff($search_this, $all);

그게 당신이해야 할 전부입니다.


4
아하 순간 감사합니다. 나는 생각했다 array_intersect.
Derek Illchuk 2014

19
이 대답해야한다
마태 복음

2
네, 그것은 같은 더 나은 솔루션입니다
올렉산드르 Diudiun

1
교차보다 더 나은 솔루션!
TheBosti 2017

1
이 중복을 차지하기 때문에이 페이지를 가로 질러 와서 위의 솔루션을 사용
Rayzor

9

array_diff로 조금 더 짧음

$musthave = array('a','b');
$test1 = array('a','b','c');
$test2 = array('a','c');

$containsAllNeeded = 0 == count(array_diff($musthave, $test1));

// this is TRUE

$containsAllNeeded = 0 == count(array_diff($musthave, $test2));

// this is FALSE


0

이건 어때요:

function array_keys_exist($searchForKeys = array(), $searchableArray) {
    $searchableArrayKeys = array_keys($searchableArray);

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.