Maison >développement back-end >tutoriel php >Valeurs clés du tableau d'échange PHP : comparaison des méthodes et optimisation des performances

Valeurs clés du tableau d'échange PHP : comparaison des méthodes et optimisation des performances

PHPz
PHPzoriginal
2024-05-04 15:06:01591parcourir

Lors de l'échange de valeurs de clés de tableau en PHP, les performances de la méthode varient en fonction de la taille du tableau. Pour les tableaux plus petits, array_flip() est plus rapide, tandis que pour les tableaux plus grands, l'utilisation d'unset() et de la syntaxe [] ou d'une boucle foreach est plus efficace. Les conseils d'optimisation incluent le choix du bon algorithme, l'utilisation de références pour éviter les copies et l'utilisation d'unset() pour réduire les allocations de mémoire.

PHP 交换数组键值:方法比较和性能优化

Valeurs de clés de tableau d'échange PHP : comparaison de méthodes et optimisation des performances

Lorsque vous devez échanger des clés et des valeurs dans des tableaux PHP, vous avez le choix entre plusieurs méthodes. Cet article comparera les performances de ces méthodes et fournira quelques conseils d’optimisation pour améliorer l’efficacité.

Method

array_flip()

array_flip() La fonction échange directement les clés et les valeurs du tableau. L'utilisation est la suivante : array_flip() 函数直接交换数组的键和值。用法如下:

$flipped_array = array_flip($array);

混合使用 unset() 和 [] 语法

可以使用 unset() 函数删除旧键,然后使用带有方括号的赋值语法添加新键。

unset($array['old_key']);
$array['new_key'] = $array['old_value'];

foreach() 循环

可以遍历数组,使用临时变量来交换键和值。

foreach ($array as $key => $value) {
  $temp = $key;
  $key = $value;
  $value = $temp;
}

性能比较

对于较小的数组(< 100 项),array_flip() 可能比其他方法更快。然而,对于较大的数组,混合使用 unset()[] 语法或 foreach 循环往往更有效。

$array_size = 100000;
$array = range(1, $array_size);

$time_array_flip = microtime(true);
$flipped_array_array_flip = array_flip($array);
$time_array_flip = microtime(true) - $time_array_flip;

$time_unset_array = microtime(true);
foreach ($array as $key =&amp;gt; $value) {
  unset($array[$key]);
  $array[$value] = $key;
}
$time_unset_array = microtime(true) - $time_unset_array;

$time_foreach = microtime(true);
foreach ($array as $key =&amp;gt; &amp;amp;$value) {
  $temp = $key;
  $key = $value;
  $value = $temp;
}
unset($value); // PHP 8 之前的版本需要手动释放引用
$time_foreach = microtime(true) - $time_foreach;

printf(&amp;quot;array_flip(): %.6fs\n&amp;quot;, $time_array_flip);
printf(&amp;quot;unset(): %.6fs\n&amp;quot;, $time_unset_array);
printf(&amp;quot;foreach(): %.6fs\n&amp;quot;, $time_foreach);

结果:

  • 对于较小的数组(100 项),array_flip() 最快。
  • 对于较大的数组(超过 10,000 项),unset()[] 语法或 foreach 循环更有效。

优化技巧

  • 选择正确的算法:根据数组的大小,选择性能最好的算法。
  • 避免不必要的复制:使用引用(&amp;)可以避免在循环中复制数据。
  • 减少内存分配:使用 unset()rrreee
Mélanger la syntaxe unset() et [] 🎜🎜🎜Vous pouvez utiliser la fonction unset() pour supprimer les anciennes clés, puis utiliser la syntaxe d'affectation avec des crochets pour ajouter nouvelles clés. 🎜rrreee🎜🎜foreach() loop🎜🎜🎜 peut parcourir le tableau, en utilisant des variables temporaires pour échanger des clés et des valeurs. 🎜rrreee🎜🎜Comparaison des performances🎜🎜🎜Pour les tableaux plus petits (< 100 éléments), array_flip() peut être plus rapide que les autres méthodes. Cependant, pour les tableaux plus grands, il est souvent plus efficace d'utiliser un mélange de syntaxe unset() et [] ou une boucle foreach. 🎜rrreee🎜🎜Résultats : 🎜🎜
  • Pour les tableaux plus petits (100 éléments), array_flip() est le plus rapide. 🎜
  • Pour les tableaux plus grands (plus de 10 000 éléments), les syntaxes unset() et [] ou la boucle foreach sont plus efficaces . 🎜🎜🎜🎜Conseils d'optimisation🎜🎜
    • 🎜Choisissez le bon algorithme : 🎜Choisissez l'algorithme avec les meilleures performances en fonction de la taille du tableau. 🎜
    • 🎜Évitez les copies inutiles : 🎜Utilisez des références (&amp;) pour éviter de copier des données en boucles. 🎜
    • 🎜Réduisez l'allocation de mémoire : 🎜Utilisez unset() pour réduire le besoin de garbage collection. 🎜🎜

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