Rumah  >  Soal Jawab  >  teks badan

Isih tatasusunan objek berdasarkan sifat tertentu

<p>Bagaimanakah saya boleh mengisih tatasusunan objek ini mengikut medan seperti <kod>nama</kod> atau <kod>kira</kod>? </p> <pre class="brush:php;toolbar:false;">Array ( [0] => Objek stdClass ( [ID] => [nama] => [kira] => 420 ) [1] => Objek stdClass ( [ID] => [nama] => [kira] => ) [2] => Objek stdClass ( [ID] => [nama] => [kira] => 4354 ) ....</pra> <p><br /></p>
P粉426780515P粉426780515397 hari yang lalu529

membalas semua(2)saya akan balas

  • P粉285587590

    P粉2855875902023-08-22 00:56:43

    Ini adalah cara yang lebih baik untuk menggunakan penutupan

    usort($your_data, function($a, $b)
    {
        return strcmp($a->name, $b->name);
    });

    Sila ambil perhatian bahawa ini tiada dalam dokumentasi PHP, tetapi jika anda menggunakan versi 5.3+, penutupan disokong dan anda boleh menyediakan parameter boleh dipanggil.

    balas
    0
  • P粉020085599

    P粉0200855992023-08-22 00:31:39

    Menggunakan usort, berikut ialah contoh yang disesuaikan daripada manual:

    function cmp($a, $b) {
        return strcmp($a->name, $b->name);
    }
    
    usort($your_data, "cmp");

    Anda juga boleh menggunakan mana-mana boleh dipanggil sebagai parameter kedua. Berikut adalah beberapa contoh:

    • Gunakan fungsi tanpa nama (setakat PHP 5.3)

      usort($your_data, function($a, $b) {return strcmp($a->name, $b->name);});
    • Digunakan di dalam kelas

      usort($your_data, array($this, "cmp")); // "cmp"应该是类中的一个方法
    • Gunakan fungsi anak panah (bermula dengan PHP 7.4)

      usort($your_data, fn($a, $b) => strcmp($a->name, $b->name));

    Selain itu, jika anda ingin membandingkan nilai berangka, fn($a, $b) => $a->count - $b->count sebagai fungsi "perbandingan" harus diselesaikan masalahnya, Sebagai alternatif, jika anda ingin melakukan perkara yang sama dengan cara lain, bermula dengan PHP 7 anda boleh menggunakan Pengendali kapal angkasa fn($a, $b) => $a->count - $b->count作为“比较”函数应该可以解决问题,或者,如果你想以另一种方式做同样的事情,从PHP 7开始你可以使用太空船操作符,像这样:fn($a, $b) => $a->count <=> $b->count, seperti ini: fn($a, $b) => $a->count <=> $ b ->kira.

    balas
    0
  • Batalbalas