needle이 배열인 경우 in_array를 어떻게 사용할 수 있습니까?
어레이가 2개 있는데 데이터베이스에서 값이 로드됩니다. 아래의 예는 다음과 같습니다.
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
제가 하고 싶은 일은 모든 값이 다음과 같이 표시되는지 확인하는 것입니다.$arr1
에 존재하는$arr2
. 위의 예는 다음과 같습니다.TRUE
다음 기간 동안:
$arr3 = array(1,2,4,5,6,7);
비교하는$arr1
와 함께$arr3
답례합니다.FALSE
.
평소에 사용합니다.in_array
단일 값을 배열로 확인하기만 하면 되기 때문입니다.하지만 이 경우엔in_array
사용할 수 없습니다.검사를 최소한의 루프로 간단하게 할 수 있는 방법이 있는지 알고 싶습니다.
설명을 위해 업데이트.
첫 번째 배열은 고유한 값을 포함하는 집합입니다.두 번째 배열은 중복된 값을 포함할 수 있습니다.처리하기 전에 둘 다 배열이 보장됩니다.
용도:
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$arr3 = array_diff($arr1, $arr2);
if (count($arr3) == 0) {
// all of $arr1 is in $arr2
}
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
if ( $arr1 == array_intersect($arr1, $arr2) ) {
// All elements of arr1 are in arr2
}
그러나 교차 결과를 사용할 필요가 없다면 array_diff를 사용하는 것이 더 공간적이고 시간적으로 효율적입니다.
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$diff = array_diff($arr1, $arr2);
if ( empty($diff) ) {
// All elements of arr1 are in arr2
}
array_diff() 함수를 사용하여 두 배열의 차이점을 찾아 보십시오. 이렇게 하면 도움이 될 것입니다.분명히 말씀드리지만, 첫 번째 배열의 모든 값은 두 번째 배열에 있어야 하지만, 그 반대는 아닙니다.
저의 경우 한 쌍의 ID가 이전에 처리되었는지 여부를 확인해야 했습니다.아주 간단합니다.array_diff()
저한테는 안 통했어요.
대신 알파벳순으로 정렬된 ID에서 키를 생성하여 in_array와 함께 사용했습니다.
<?php
$pairs = array();
// ...
$pair = array($currentId, $id);
sort($pair);
$pair = implode('-', $pair);
if (in_array($pair, $pairs)) {
continue;
}
$pairs[$pair] = $pair;
이것은 아마도 전혀 최적의 해결책이 아닐 것이지만, 저는 단지 더러운 스크립트를 한 번 실행하기 위해 그것이 필요했을 뿐입니다.
function in_2array($needle,$haystack,$full_search=false){
$ret = false;
foreach($needle as $search){
if(in_array($search,$haystack)){
$ret = true;
if(!$full_search){
break;
}
}else if($full_search){
$ret = false;
break;
}
}
return $ret;
}
if(in_2array($arr1,$arr2,true)){
echo 'It`s Ok!';
}
언급URL : https://stackoverflow.com/questions/2304436/how-can-i-use-in-array-if-the-needle-is-an-array
'programing' 카테고리의 다른 글
SQLALchemy를 사용하여 Pandas DataFrame 대량 삽입 (0) | 2023.09.20 |
---|---|
어떻게 두 개를 만들겠습니까?어떻게 두 개를 만들겠습니까?겹치기? (0) | 2023.09.20 |
iOS UI 검색바에서 검색(타이핑 속도 기준)을 조절하는 방법은? (0) | 2023.09.20 |
SELECT SUM은 레코드가 없을 때 행을 반환합니다. (0) | 2023.09.20 |
유닉스와 윈도우 모두에서 작동하는 C의 64비트 정수(uint64_t)에 해당하는 아토이는? (0) | 2023.09.20 |