Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengisihan berbilang dimensi tatasusunan PHP: alat yang berkuasa untuk melaksanakan pengisihan kompleks

Pengisihan berbilang dimensi tatasusunan PHP: alat yang berkuasa untuk melaksanakan pengisihan kompleks

WBOY
WBOYasal
2024-04-29 15:18:011155semak imbas

Teknologi pengisihan berbilang dimensi ajaib tatasusunan dalam PHP menggunakan kaedah __callStatic() untuk mencapai pengisihan tatasusunan berbilang dimensi yang kompleks. 1. Buat tatasusunan fungsi pengisihan, yang mengandungi fungsi pengisihan untuk setiap medan. 2. Isih tatasusunan menggunakan fungsi isihan tersuai. 3. Kembalikan tatasusunan yang diisih. Kes praktikal: Isih tatasusunan berbilang dimensi mengikut umur dalam tertib menaik dan namakan dalam tertib menurun, dan keluarkan hasil yang diisih.

Pengisihan berbilang dimensi tatasusunan PHP: alat yang berkuasa untuk melaksanakan pengisihan kompleks

Pengisihan Pelbagai Dimensi Sihir Tatasusunan PHP: Alat yang berkuasa untuk melaksanakan pengisihan kompleks

Pengenalan

Dalam PHP, tatasusunan ialah struktur asas untuk menyimpan dan menyusun data. Pengisihan boleh menjadi tugas yang kompleks apabila berurusan dengan tatasusunan berbilang dimensi. Tutorial ini akan memperkenalkan teknik yang dipanggil Susunan Multidimensi Sihir Array, yang menyediakan kaedah yang berkuasa untuk menyusun tatasusunan berbilang dimensi yang kompleks.

Kaedah Ajaib

Kaedah sihir tatasusunan dalam PHP membolehkan anda mengatasi kaedah pengisihan dan perbandingan terbina dalam tatasusunan. Untuk melaksanakan pengisihan berbilang dimensi, kami akan menggunakan kaedah __callStatic(), yang membolehkan anda memanggil kaedah statik pada kelas walaupun kaedah itu tidak wujud. __callStatic() 方法,它允许您在类上调用静态方法,即使该方法不存在。

在下面的示例中,我们创建了一个 Multisort 类,该类覆盖了 array_multisort() 方法:

class Multisort {
    public static function __callStatic($method, $args) {
        // 检查方法名称是否是 "array_multisort"
        if ($method === "array_multisort") {
            // 创建一个排序函数数组
            $sortFns = [];

            // 遍历排序参数
            foreach ($args as $key => $field) {
                // 获取排序方式
                $direction = isset($args[$key + 1]) ? $args[$key + 1] : SORT_ASC;

                // 创建排序函数
                $sortFns[] = function($a, $b) use ($field, $direction) {
                    return strnatcmp($a[$field], $b[$field]) * $direction;
                };
            }

            // 使用自定义排序函数对数组进行排序
            usort($args[0], $sortFns);

            // 返回排序后的数组
            return $args[0];
        }
        throw new BadMethodCallException("Method $method does not exist.");
    }
}

实战案例

以下是对 Multisort

Dalam contoh di bawah, kami mencipta kelas Multisort yang mengatasi kaedah array_multisort():

$data = [
    ['name' => 'John', 'age' => 30, 'score' => 85],
    ['name' => 'Alice', 'age' => 25, 'score' => 90],
    ['name' => 'Bob', 'age' => 35, 'score' => 80],
];

// 按年龄升序,然后按姓名降序排序
$sortedData = Multisort::array_multisort($data, 'age', SORT_ASC, 'name', SORT_DESC);

// 输出排序后的数据
print_r($sortedData);

🎜Kes praktikal🎜🎜🎜Berikut ialah kes Praktikal bagi Kelas Multisort, digunakan untuk mengisih tatasusunan berbilang dimensi yang mengandungi berbilang medan: 🎜
Array
(
    [0] => Array
        (
            [name] => Alice
            [age] => 25
            [score] => 90
        )

    [1] => Array
        (
            [name] => Bob
            [age] => 35
            [score] => 80
        )

    [2] => Array
        (
            [name] => John
            [age] => 30
            [score] => 85
        )

)
🎜Kod ini akan mengeluarkan data yang diisih berikut: 🎜rrreee

Atas ialah kandungan terperinci Pengisihan berbilang dimensi tatasusunan PHP: alat yang berkuasa untuk melaksanakan pengisihan kompleks. 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