Nilai kunci tatasusunan pertukaran PHP: perbandingan kaedah dan pengoptimuman prestasi

PHPz
Lepaskan: 2024-05-04 15:06:01
asal
552 orang telah melayarinya

Apabila menukar nilai kunci tatasusunan dalam PHP, prestasi kaedah berbeza mengikut saiz tatasusunan. Untuk tatasusunan yang lebih kecil, array_flip() adalah lebih pantas, manakala untuk tatasusunan yang lebih besar, menggunakan unset() dan sintaks [] atau gelung foreach adalah lebih cekap. Petua pengoptimuman termasuk memilih algoritma yang betul, menggunakan rujukan untuk mengelakkan salinan dan menggunakan unset() untuk mengurangkan peruntukan memori.

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

Nilai kunci tatasusunan pertukaran PHP: perbandingan kaedah dan pengoptimuman prestasi

Apabila anda perlu menukar kunci dan nilai dalam tatasusunan PHP, terdapat beberapa kaedah untuk dipilih. Artikel ini akan membandingkan prestasi kaedah ini dan memberikan beberapa petua pengoptimuman untuk meningkatkan kecekapan.

Kaedah

array_flip()

array_flip() Fungsi menukar terus kekunci dan nilai tatasusunan. Penggunaan adalah seperti berikut: array_flip() 函数直接交换数组的键和值。用法如下:

$flipped_array = array_flip($array);
Salin selepas log masuk

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

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

unset($array['old_key']);
$array['new_key'] = $array['old_value'];
Salin selepas log masuk

foreach() 循环

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

foreach ($array as $key => $value) {
  $temp = $key;
  $key = $value;
  $value = $temp;
}
Salin selepas log masuk

性能比较

对于较小的数组(< 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 =&gt; $value) {
  unset($array[$key]);
  $array[$value] = $key;
}
$time_unset_array = microtime(true) - $time_unset_array;

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

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

结果:

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

优化技巧

  • 选择正确的算法:根据数组的大小,选择性能最好的算法。
  • 避免不必要的复制:使用引用(&)可以避免在循环中复制数据。
  • 减少内存分配:使用 unset()rrreee
Mencampurkan sintaks unset() dan [] 🎜🎜🎜Anda boleh menggunakan fungsi unset() untuk memadam kekunci lama, dan kemudian gunakan sintaks tugasan dengan kurungan segi empat sama untuk menambah kunci baru. 🎜rrreee🎜🎜foreach() gelung🎜🎜🎜 boleh lelaran ke atas tatasusunan, menggunakan pembolehubah sementara untuk menukar kunci dan nilai. 🎜rrreee🎜🎜Perbandingan prestasi🎜🎜🎜Untuk tatasusunan yang lebih kecil (< 100 item), array_flip() mungkin lebih pantas daripada kaedah lain. Walau bagaimanapun, untuk tatasusunan yang lebih besar, selalunya lebih cekap untuk menggunakan campuran sintaks unset() dan [] atau gelung foreach. 🎜rrreee🎜🎜Keputusan: 🎜🎜
  • Untuk tatasusunan yang lebih kecil (100 item), array_flip() adalah terpantas. 🎜
  • Untuk tatasusunan yang lebih besar (lebih daripada 10,000 item), sintaks unset() dan [] atau gelung foreach adalah lebih cekap . 🎜🎜🎜🎜Petua pengoptimuman🎜🎜
    • 🎜Pilih algoritma yang betul: 🎜Pilih algoritma dengan prestasi terbaik berdasarkan saiz tatasusunan. 🎜
    • 🎜Elak penyalinan yang tidak perlu: 🎜Gunakan rujukan (&) untuk mengelak daripada menyalin data dalam gelung. 🎜
    • 🎜Kurangkan peruntukan memori: 🎜Gunakan unset() untuk mengurangkan keperluan kutipan sampah. 🎜🎜

Atas ialah kandungan terperinci Nilai kunci tatasusunan pertukaran PHP: perbandingan kaedah dan pengoptimuman prestasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan