Rumah >pembangunan bahagian belakang >tutorial php >PHP pengoptimuman prestasi menyusun tatasusunan berbilang dimensi: daripada kod ke algoritma

PHP pengoptimuman prestasi menyusun tatasusunan berbilang dimensi: daripada kod ke algoritma

王林
王林asal
2024-04-29 15:57:011144semak imbas

Pengoptimuman prestasi pengisihan tatasusunan berbilang dimensi PHP boleh dipertingkatkan melalui kedua-dua kod dan algoritma. Pengoptimuman kod termasuk menggunakan usort dan fungsi perbandingan yang ditulis sendiri untuk mengelakkan perbandingan dan salinan yang berlebihan. Pengoptimuman algoritma melibatkan algoritma pengisihan dan penggabungan cepat. Isih pantas sesuai untuk tatasusunan besar, manakala isihan cantum sesuai untuk sebarang jenis data. Contoh kod menunjukkan cara mengisih tatasusunan dengan elemen kanak-kanak menggunakan kedua-dua algoritma ini, mengisih pantas mengikut id dan menggabungkan isihan mengikut nama. . Walau bagaimanapun, isu prestasi timbul apabila anda perlu mengisih tatasusunan berbilang dimensi. Artikel ini akan meneroka pengoptimuman prestasi pengisihan tatasusunan berbilang dimensi dalam PHP dan menyediakan penyelesaian daripada kedua-dua aspek kod dan algoritma.

PHP pengoptimuman prestasi menyusun tatasusunan berbilang dimensi: daripada kod ke algoritmaPengoptimuman kod

Gunakan usort dan fungsi perbandingan tulisan sendiri

Berbanding dengan fungsi sort terbina dalam, usort fungsi kod> Mempunyai fleksibiliti yang lebih besar kerana ia membolehkan anda menggunakan fungsi perbandingan tersuai untuk mengisih elemen tatasusunan. Fungsi perbandingan yang ditulis sendiri boleh disesuaikan untuk keperluan pengisihan khusus anda, menjadikan pengisihan lebih cekap.

<?php
function compare($a, $b) {
  return $a['key'] <=> $b['key'];
}

usort($array, 'compare');

Elakkan perbandingan dan penyalinan yang berlebihan

Semasa proses pengisihan, elemen tatasusunan akan dibandingkan dan disalin berulang kali. Prestasi boleh dipertingkatkan dengan mengurangkan bilangan perbandingan dan salinan yang tidak perlu. Petua berikut boleh membantu anda mengelakkan operasi ini:

Gunakan isihan gabungan: usort 和自写比较函数

相比于内置的 sort 函数,usortIsih gabung ialah algoritma bahagi dan takluk yang mengurangkan bilangan perbandingan yang tidak perlu.

Cipta salinan untuk diisih: Isih salinan tatasusunan untuk mengelak mengubah suai tatasusunan asal.

    Pengoptimuman algoritma
  • Gunakan isihan pantas:
  • Isih cepat ialah algoritma isihan yang cekap, terutamanya sesuai untuk tatasusunan yang besar. Ia berfungsi dengan membahagikan tatasusunan kepada bahagian yang lebih kecil dan menyusun bahagian secara rekursif.
  • <?php
    function quickSort($array) {
      if (count($array) <= 1) {
        return $array;
      }
      $pivot = $array[0];
      $left = array_filter($array, function ($item) use ($pivot) {
        return $item < $pivot;
      });
      $right = array_filter($array, function ($item) use ($pivot) {
        return $item >= $pivot;
      });
      return array_merge(quickSort($left), [$pivot], quickSort($right));
    }

Gunakan pengisihan gabungan:

Isih gabungan juga merupakan algoritma pengisihan yang cekap yang berfungsi pada sebarang jenis data. Ia berfungsi dengan membahagikan tatasusunan secara rekursif kepada bahagian yang lebih kecil, menyusun bahagian, dan kemudian menggabungkannya.

<?php
function mergeSort($array) {
  if (count($array) <= 1) {
    return $array;
  }
  $mid = intdiv(count($array), 2);
  $left = mergeSort(array_slice($array, 0, $mid));
  $right = mergeSort(array_slice($array, $mid));
  return merge($left, $right);
}

function merge($left, $right) {
  $result = [];
  while (count($left) > 0 && count($right) > 0) {
    if ($left[0] <= $right[0]) {
      $result[] = array_shift($left);
    } else {
      $result[] = array_shift($right);
    }
  }
  return array_merge($result, $left, $right);
}
Kes praktikal

Berikut ialah kes praktikal yang menunjukkan cara menggunakan isihan pantas dan menggabungkan isihan untuk mengisih tatasusunan berbilang dimensi dengan sub-elemen:

<?php
$array = [
  ['id' => 1, 'name' => 'John'],
  ['id' => 3, 'name' => 'Alice'],
  ['id' => 2, 'name' => 'Bob']
];

// 使用快速排序按 id 排序
$quickSortedArray = quickSort($array);

// 使用归并排序按 name 排序
$mergeSortedArray = mergeSort($array);

// 输出排序后的数组
print_r($quickSortedArray);
print_r($mergeSortedArray);
Output:

rreee

Atas ialah kandungan terperinci PHP pengoptimuman prestasi menyusun tatasusunan berbilang dimensi: daripada kod ke algoritma. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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