>  기사  >  백엔드 개발  >  PHP array_search 및 in_array 함수 효율성 문제

PHP array_search 및 in_array 함수 효율성 문제

藏色散人
藏色散人앞으로
2019-10-17 13:41:503678검색

Problem

인터페이스에서 원인을 조사한 결과 array_search에서 검색할 때 시간이 많이 걸리는 것으로 나타났습니다. 배열 요소의 키가 커지면 배열이 커질수록 효율성이 높아지며 시간 소모도 늘어납니다. 특히 대규모 배열의 경우 시간이 많이 걸립니다. 이 문제는 in_array 함수에도 존재합니다.

Solution

array_flip을 뒤집은 후 in_array 함수 대신 isset을 사용하고 array_search 대신 $array[key]를 사용하면 문제를 해결할 수 있습니다. 문제 배열 시간 초과 시간이 많이 걸리는 문제

다음은 PHP 공식 웹사이트에서 복사한 메모입니다. 두 가지 방법의 효율성 차이를 확인할 수 있습니다

원본 웹사이트: https://www.php.net/manual/en/function.in-array.php

If you're working with very large 2 dimensional arrays (eg 20,000+ elements) it's much faster to do this...
$needle = 'test for this';
$flipped_haystack = array_flip($haystack);
if ( isset($flipped_haystack[$needle]) )
{
  print "Yes it's there!";
}
I had a script that went from 30+ seconds down to 2 seconds (when hunting through a 50,000 element array 50,000 times).
Remember to only flip it once at the beginning of your code though!

Correction

#🎜🎜 #누군가는 array_flip이 in_array 및 array_search보다 더 효율적이라고 말했습니다. 몇 번 실험해 본 결과 이는 사실입니다. 이것은 원래 고려하지 않은 것입니다. 이 솔루션은 in_array 및 array_search 함수가 여러 번 사용되는 경우에만 유효합니다. 아래는 제가 직접 실험한 결과입니다. 문제를 지적해 주신 @ puppet님 감사합니다

<?php
$array = array();
for ($i=0; $i<200000; $i++){
    ##随机字符串
    $array[$i] = get_rand().$i;
}
$str = $array[150000];
$time1 = microtime(true);
array_search($str, $array);
$time2 = microtime(true);
echo &#39;原始方法:&#39;.($time2-$time1)."\n";
$time3 =  microtime(true);
$new_array = array_flip($array);
isset($new_array[$str]);
$time4 = microtime(true);
echo &#39;新方法:&#39;.($time4-$time3);

결과:

原始方法:0.0010008811950684
新方法:0.0069980621337891

5000회 반복

$array = array();
for ($i=0; $i<200000; $i++){
    ##随机字符串
    $array[$i] = get_rand().$i;
}
$str = $array[199999];
$time1 = microtime(true);
for ($i=0; $i<5000; $i++){
    array_search($str, $array);
}
$time2 = microtime(true);
echo &#39;原始方法:&#39;.($time2-$time1)."\n";
$time3 =  microtime(true);
$new_array = array_flip($array);
for ($i=0; $i<5000; $i++){
    isset($new_array[$str]);
}
$time4 = microtime(true);
echo &#39;新方法:&#39;.($time4-$time3);

결과: #🎜 🎜 #

原始方法:2.9000020027161
新方法:0.008030891418457

위 내용은 PHP array_search 및 in_array 함수 효율성 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제