Maison  >  Article  >  développement back-end  >  2 fonctions PHP in_array personnalisées pour résoudre le problème d'efficacité consistant à juger in_array à partir de grandes quantités de données

2 fonctions PHP in_array personnalisées pour résoudre le problème d'efficacité consistant à juger in_array à partir de grandes quantités de données

高洛峰
高洛峰original
2016-12-22 13:37:381393parcourir

Mais si le tableau est relativement grand, les performances diminueront et le temps d'exécution sera plus long. Donc, si vous souhaitez optimiser pour les grands tableaux, voici deux méthodes (toutes deux implémentées via des fonctions personnalisées) :

1. Retournez la clé et la valeur du tableau, et utilisez isset pour déterminer si la clé existe dans le tableau

/**
 * in_array is too slow when array is large
 */
public static function inArray($item, $array) {
    $flipArray = array_flip($array);
    return isset($flipArray[$item]);
}
Vous pouvez également demander pourquoi array_key_exists n'est pas utilisé pour le jugement au lieu d'utiliser isset ? Regardons la comparaison entre array_key_exists() et isset() :

isset() ne retournera pas TRUE pour les valeurs NULL dans le tableau, mais array_key_exists() le fera.

<?php
$search_array = array(&#39;first&#39; => null, &#39;second&#39; => 4);
// returns false
isset($search_array[&#39;first&#39;]);
// returns true
array_key_exists(&#39;first&#39;, $search_array);
?>
2. Utilisez implode pour vous connecter et utilisez directement strpos pour juger


Utilisez la fonction implode pour vous connecter avec des virgules et utilisez strpos pour. juger directement. La position des chaînes en PHP est très rapide, surtout lorsque la quantité de données est importante. Il faut cependant noter que "," doit être ajouté au début et à la fin, ce qui est plus rigoureux. Par exemple : ,user1,user2,user3, lors de la recherche, recherchez ,user1,. Utilisez également strpos! == false, car le premier renverra 0. Les exemples sont les suivants :

/**
 * in_array is too slow when array is large
 */
public static function inArray($item, $array) {
    $str = implode(&#39;,&#39;, $array);
    $str = &#39;,&#39; . $str . &#39;,&#39;;
    $item = &#39;,&#39; . $item . &#39;,&#39;;
    return false !== strpos($item, $str) ? true : false;
}


Plus de 2 fonctions PHP in_array personnalisées pour résoudre le problème d'efficacité de l'évaluation de in_array à partir de grandes quantités de données. Pour les articles connexes, veuillez faire attention. au site Web PHP 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