Maison >développement back-end >tutoriel php >Explication détaillée du problème de BUG de délai d'attente de la fonction array_diff() de PHP lors du traitement de grands tableaux
La fonction array_diff() de PHP 5.2.6 et supérieur prend un temps extrêmement long lors du traitement de grands tableaux. Ce bug a été officiellement confirmé avant que ce problème ne soit résolu ou lorsque nous ne pouvons pas contrôler la version PHP, vous pouvez utiliser le. méthode fournie dans cet article
cisa pour le soumettre à la page officielle BUG de PHP
Le code est le suivant :
<?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); } ?>
Selon le modérateur du forum ChinaUnix La méthode de réécriture du code de l'idée hightman
est la suivante :
<?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; } ?>
Cette méthode n'échange que la clé et la valeur du deuxième tableau, elle est donc plus efficace.
Remarque : la fonction array_diff() intégrée de PHP peut gérer plusieurs tableaux, mais la méthode fournie dans cet article ne gère que la comparaison de deux tableaux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!