Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengisih tatasusunan berdasarkan dua medan dalam php

Bagaimana untuk mengisih tatasusunan berdasarkan dua medan dalam php

PHPz
PHPzasal
2023-04-18 09:06:04922semak imbas

Dalam PHP, apabila kita perlu mengisih tatasusunan, kita boleh menggunakan fungsi terbina dalam seperti sort() dan rsort() untuk mengisih elemen dalam tatasusunan. Walau bagaimanapun, kadangkala kita perlu mengisih berdasarkan dua medan dalam tatasusunan, kemudian kita perlu menggunakan fungsi usort().

usort — Isih nilai dalam tatasusunan menggunakan fungsi perbandingan yang ditentukan pengguna

Sintaks: bool usort (array &$array, boleh dipanggil $value_compare_func)

Fungsi ini Isih nilai dalam tatasusunan menggunakan fungsi perbandingan yang ditentukan. Perlu diingatkan bahawa fungsi ini secara langsung mempengaruhi tatasusunan asal dan tidak mengembalikan tatasusunan yang diisih.

Senario Penggunaan

Apabila berurusan dengan beberapa aplikasi yang kompleks, kadangkala perlu mengisih mengikut berbilang medan, seperti mengisih mengikut harga dahulu, dan kemudian mengisih mengikut volum jualan apabila harga adalah sama , maka kita perlu Gunakan fungsi usort() untuk mencapai ini.

Kod Contoh

Berikut ialah contoh sebenar menggunakan fungsi usort() untuk mengisih tatasusunan. Katakan kita mempunyai susunan produk yang mengandungi nama produk, harga, jumlah jualan dan maklumat lain Sekarang kita perlu mengisih produk berdasarkan harga dan jumlah jualan.

$products = [
   [
      "name" => "商品A",
      "price" => 100,
      "sales" => 200
   ],
   [
      "name" => "商品B",
      "price" => 120,
      "sales" => 150
   ],
   [
      "name" => "商品C",
      "price" => 80,
      "sales" => 300
   ],
];

function cmp($a, $b) {
   if ($a['price'] == $b['price']) {
      return $a['sales'] < $b[&#39;sales&#39;] ? 1 : -1;
   }
   return $a[&#39;price&#39;] > $b['price'] ? 1 : -1;
}

usort($products, "cmp");

print_r($products);

Hasil berjalan:

Array
(
    [0] => Array
        (
            [name] => 商品C
            [price] => 80
            [sales] => 300
        )

    [1] => Array
        (
            [name] => 商品A
            [price] => 100
            [sales] => 200
        )

    [2] => Array
        (
            [name] => 商品B
            [price] => 120
            [sales] => 150
        )
)

Di sini kami mentakrifkan fungsi cmp(), yang digunakan untuk membandingkan harga dan volum jualan dua produk, dan menyusunnya dalam tertib menaik daripada harga , Isih mengikut volum jualan daripada besar kepada kecil. Kemudian gunakan fungsi usort() untuk mengisih tatasusunan produk dan mencetak hasil yang diisih.

Ringkasan

Menggunakan fungsi usort() boleh mengisih tatasusunan dan mengisih berdasarkan berbilang medan untuk mencapai keperluan aplikasi yang lebih kompleks. Perlu diingatkan di sini bahawa fungsi pengisihan membandingkan dua elemen tatasusunan, jadi $a dan $b masing-masing mewakili dua elemen dalam tatasusunan Fungsi perlu mengembalikan satu daripada tiga nilai nombor positif, nombor negatif dan 0 , menunjukkan bahawa nisbah $a $b adalah lebih besar, lebih kecil atau sama.

Atas ialah kandungan terperinci Bagaimana untuk mengisih tatasusunan berdasarkan dua medan dalam php. 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