>  기사  >  백엔드 개발  >  array_diff와 PHP 배열 탐색을 구현하는 다른 방법의 차이점

array_diff와 PHP 배열 탐색을 구현하는 다른 방법의 차이점

巴扎黑
巴扎黑원래의
2017-05-24 14:34:091549검색

각각 5000개의 요소가 있는 두 개의 배열을 제공하고 그 차이를 계산합니다. 직설적으로 말하면 PHP와 array_diff 알고리즘을 구현하는 데 가장 적합하다고 생각하는 알고리즘을 사용하는 것입니다.

처음 이 질문을 받았을 때 매우 간단하다고 생각하여 과거 경험을 바탕으로 질문을 작성했습니다.

function array_diff($array_1, $array_2) { 
    $diff = array(); 
 
    foreach ($array_1 as $k => $v1) { 
        $flag = false; 
        foreach ($array_2 as $v2) { 
            if ($flag = ($v1 == $v2)) { 
                break; 
            } 
        } 
 
        if (!$flag) { 
            $diff[$k] = $v1; 
            
        } 
    } 
 
    return $diff; 
}

구현이 가능하지만 효율성이 떨어진다는 것을 알았습니다. 이 기능은 끔찍합니다. 그래서 알고리즘을 재검토하고 최적화했습니다. 두 번째 함수는 다음과 같습니다.

function array_diff($array_1, $array_2) { 
    foreach ($array_1 as $key => $item) { 
        if (in_array($item, $array_2, true)) { 
            unset($array_1[$key]); 
        } 
    } 
 
    return $array_1; 
}

글쎄, 이번에는 원래 array_diff 함수만큼 빠릅니다. 하지만 더 최적화된 방법이 있을까요? ChinaUnix에 대한 기사에서 저는 PHP를 다음과 같이 작성할 수 있다는 것을 발견했습니다.

function array_diff($array_1, $array_2) { 
    $array_2 = array_flip($array_2); 
    foreach ($array_1 as $key => $item) { 
        if (isset($array_2[$item])) { 
            unset($array_1[$key]); 
        } 
     } 
 
    return $array_1; 
}

이 함수의 효율성은 놀랍고 원래 array_diff 함수보다 훨씬 빠릅니다. 이유를 조사하면서 설명을 찾았습니다. 키가 HASH로 구성되어 있기 때문에 검색이 매우 빠른 반면 값은 키 구성에만 저장되고 인덱스 자체가 없으므로 모든 검색이 순회됩니다.

요약

이것은 PHP 언어의 작은 트릭이지만 배열의 값을 순회하고 비교할 때 값을 비교해야 하는 경우 키를 사용하여 반전시키는 것은 실제로 일반적인 가치 대비 가치보다 낫습니다. 비교 효율성이 훨씬 높습니다.

예를 들어 위의 함수 2는 in_array 함수를 호출해야 하며 함수 내에 있는지 확인하기 위해 반복해야 하며, 함수 3은 키가 배열에 존재하는지 여부만 확인합니다. 배열 키와 값의 다양한 조직적 인덱싱 방법과 결합하면 효율성이 상상 이상으로 높다는 것은 매우 이해할 수 있습니다.

위 내용은 array_diff와 PHP 배열 탐색을 구현하는 다른 방법의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.