programing

needle이 배열인 경우 in_array를 어떻게 사용할 수 있습니까?

topblog 2023. 9. 20. 20:02
반응형

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
}

array_intersector array_diff:

$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

반응형