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

巴扎黑
Libérer: 2023-03-07 21:04:01
original
2102 Les gens l'ont consulté

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); 
} 
?>
Copier après la connexion


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; 
} 
?>
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal