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

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

巴扎黑
巴扎黑original
2017-05-23 18:02:152135parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn