Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung des Timeout-BUG-Problems der PHP-Funktion array_diff() bei der Verarbeitung großer Arrays

Ausführliche Erläuterung des Timeout-BUG-Problems der PHP-Funktion array_diff() bei der Verarbeitung großer Arrays

巴扎黑
巴扎黑Original
2017-05-23 18:02:152087Durchsuche

Die Funktion array_diff() von PHP 5.2.6 und höher benötigt bei der Verarbeitung großer Arrays extrem viel Zeit. Dieser Fehler wurde offiziell bestätigt, bevor dieses Problem behoben wurde, oder wenn wir die PHP-Version nicht kontrollieren können Methode in diesem Artikel bereitgestellt

cisa, um es an die offizielle PHP-BUG-Seite zu senden

Der Code lautet wie folgt:

<?php 
/** 
* 解决 php 5.2.6 以上版本 array_diff() 函数在处理 
* 大数组时的需要花费超长时间的问题 
* 
* 整理:http://www.CodeBit.cn 
* 来源:http://bugs.php.net/47643 
*/ 
function array_diff_fast($data1, $data2) { 
$data1 = array_flip($data1); 
$data2 = array_flip($data2); 
foreach($data2 as $hash => $key) { 
if (isset($data1[$hash])) unset($data1[$hash]); 
} 
return array_flip($data1); 
} 
?>


Gemäß Moderator des ChinaUnix-Forums Die Methode zum Umschreiben des Hightman-Ideen-

-Codes lautet wie folgt:

<?php 
/** 
* 解决 php 5.2.6 以上版本 array_diff() 函数在处理大数组时的效率问题 
* 根据 ChinaUnix 论坛版主 hightman 思路写的方法 
* 
* 整理:http://www.CodeBit.cn 
* 参考:http://bbs.chinaunix.net/viewthread.php?tid=938096&rpid=6817036&ordertype=0&page=1#pid6817036 
*/ 
function array_diff_fast($firstArray, $secondArray) { 
// 转换第二个数组的键值关系 
$secondArray = array_flip($secondArray); 
// 循环第一个数组 
foreach($firstArray as $key => $value) { 
// 如果第二个数组中存在第一个数组的值 
if (isset($secondArray[$value])) { 
// 移除第一个数组中对应的元素 
unset($firstArray[$key]); 
} 
} 
return $firstArray; 
} 
?>

Diese Methode tauscht nur den Schlüssel und den Wert des zweiten Arrays aus, also ist es so effizienter.
Hinweis: Die in PHP integrierte Funktion array_diff() kann mehrere Arrays verarbeiten, die in diesem Artikel bereitgestellte Methode verarbeitet jedoch nur den Vergleich zweier Arrays.

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Timeout-BUG-Problems der PHP-Funktion array_diff() bei der Verarbeitung großer Arrays. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn