Bagaimana untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi dalam PHP

PHPz
Lepaskan: 2023-04-27 14:35:18
asal
832 orang telah melayarinya

Menukar tatasusunan berbilang dimensi dan tatasusunan satu dimensi dalam PHP bukanlah operasi yang sukar. Matlamat ini boleh dicapai dengan mudah dengan menggunakan beberapa fungsi dengan betul.

Apakah tatasusunan berbilang dimensi dan tatasusunan satu dimensi

Dalam PHP, tatasusunan ialah jenis data yang sangat berguna dan biasa digunakan, dan sering digunakan dalam pembangunan sebenar. Selain menyediakan operasi biasa untuk menyimpan dan mengakses elemen, tatasusunan PHP juga membenarkan penggunaan tatasusunan berbilang dimensi dan tatasusunan satu dimensi, yang digunakan untuk menyimpan data struktur kompleks dan beberapa data ringkas masing-masing.

Tatasusunan berbilang dimensi bermaksud tatasusunan lain bersarang di dalam tatasusunan, iaitu, unsur tatasusunan juga merupakan tatasusunan, tetapi setiap tatasusunan mesti mempunyai kunci unik secara logik. Sebagai contoh, tatasusunan berbilang dimensi yang digunakan untuk menyimpan gred tiga kursus boleh diwakili sebagai:

$score = array(
    "math" => array(
        "Tom" => 89,
        "Jerry" => 92,
        "John" => 76
    ),
    "english" => array(
        "Tom" => 78,
        "Jerry" => 85,
        "John" => 91
    ),
    "science" => array(
        "Tom" => 95,
        "Jerry" => 84,
        "John" => 88
    )
);
Salin selepas log masuk

manakala tatasusunan satu dimensi merujuk kepada tatasusunan di mana setiap elemen mengandungi hanya satu nilai, yang boleh rentetan, nombor, nilai Boolean, dsb. Kekunci tatasusunan satu dimensi boleh berupa rentetan atau nombor, tetapi nilai kekunci berangka mestilah integer atau nombor titik terapung. Contohnya:

$fruit = array("apple", "orange", "banana", "pear");
Salin selepas log masuk

Tukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi

Tukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi ialah operasi yang sangat biasa, untuk sesetengah operasi yang memerlukan pengisihan, membandingkan , pencarian dan operasi lain pada elemen tatasusunan berbilang dimensi Secara umumnya, lebih mudah untuk menggunakan tatasusunan satu dimensi. Berikut memperkenalkan dua kaedah untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi.

Kaedah 1: Gunakan fungsi rekursif

Rekursi ialah kaedah yang sangat berkuasa yang membolehkan kami mengendalikan banyak tugas dengan mudah, termasuk memproses tatasusunan berbilang dimensi yang kompleks. Dengan menggunakan fungsi rekursif untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi, anda boleh mengurangkan bilangan peringkat dalam tatasusunan secara beransur-ansur dan akhirnya memindahkan semua elemen ke dalam tatasusunan satu dimensi yang baharu. Perlaksanaan khusus adalah seperti berikut:

function multi_to_one($multi_arr)
{
    static $result_arr = array();
    foreach ($multi_arr as $key => $val) {
        if (is_array($val)) {
            multi_to_one($val);
        } else {
            $result_arr[$key] = $val;
        }
    }
    return $result_arr;
}
Salin selepas log masuk

Dalam fungsi ini, kami melelang melalui setiap elemen Jika kami mendapati bahawa elemen semasa ialah tatasusunan, maka kami melakukan operasi rekursif padanya sehingga elemen itu tidak lagi tatasusunan; jika tidak, kami Menambah elemen semasa pada tatasusunan statik $result_arr yang ditakrifkan dalam fungsi. Akhir sekali, kami mengembalikan tatasusunan satu dimensi yang diproses.

Gunakan fungsi ini untuk menukar tatasusunan berbilang dimensi $score di atas kepada tatasusunan satu dimensi:

$result = multi_to_one($score);
print_r($result);
Salin selepas log masuk

Hasil output ialah:

Array
(
    [Tom] => 95
    [Jerry] => 84
    [John] => 88
)
Salin selepas log masuk
Salin selepas log masuk

Kaedah 2: Gunakan array_walk_recursive function

Terdapat fungsi array_walk_recursive khusus digunakan untuk merentasi tatasusunan dalam PHP, yang boleh merentasi setiap elemen dalam tatasusunan berbilang dimensi. Fungsi ini boleh menerima fungsi panggil balik sebagai parameter kedua, di mana kita boleh memanipulasi elemen dan menambahnya pada tatasusunan satu dimensi baharu. Berikut ialah pelaksanaan khusus:

function flatten_array($multi_arr)
{
    $result_arr = array();
    array_walk_recursive($multi_arr, function($val, $key) use (&$result_arr) { $result_arr[$key] = $val; });
    return $result_arr;
}
Salin selepas log masuk

Berbanding dengan kaedah pertama, kaedah ini menggunakan fungsi tanpa nama untuk menyelesaikan operasi panggil balik Fungsi ini menggunakan kata kunci use untuk memperkenalkan pembolehubah luaran $result_arr dan Simpan elemen yang diproses dalam tatasusunan ini. Akhirnya, tatasusunan satu dimensi yang dijana dikembalikan.

Menggunakan fungsi ini, anda juga boleh menukar tatasusunan berbilang dimensi di atas $score kepada tatasusunan satu dimensi:

$result = flatten_array($score);
print_r($result);
Salin selepas log masuk

Hasil output ialah:

Array
(
    [Tom] => 95
    [Jerry] => 84
    [John] => 88
)
Salin selepas log masuk
Salin selepas log masuk

Satu tatasusunan -dimensi kepada tatasusunan berbilang dimensi

Menukar tatasusunan satu dimensi kepada tatasusunan berbilang dimensi juga merupakan keperluan yang sangat biasa Dalam aplikasi praktikal, tatasusunan satu dimensi perlu dikumpulkan mengikut syarat tertentu. Berikut menerangkan kaedah untuk menukar tatasusunan satu dimensi kepada tatasusunan berbilang dimensi.

Kaedah: Gunakan fungsi array_reduce

array_reduce ialah fungsi tertib tinggi dalam PHP Ia boleh merentasi tatasusunan seperti array_walk_recursive, tetapi tidak seperti array_walk_recursive, array_reduce Anda. juga boleh menerima parameter sebagai nilai awal fungsi, dan nilai ini akan menjadi nilai awal setiap fungsi panggil balik dan dihantar kepada mereka. array_reduce boleh digunakan untuk pelbagai jenis pengiraan dan operasi pemprosesan, dan kami boleh menggunakannya untuk menukar tatasusunan satu dimensi kepada tatasusunan berbilang dimensi.

Berikut ialah pelaksanaan khusus:

function group_array($data_arr, $group_key)
{
    $result_arr = array_reduce($data_arr, function(&$result, $item) use ($group_key) {
        $index = $item[$group_key];
        if (!isset($result[$index])) {
            $result[$index] = array();
        }
        $result[$index][] = $item;
        return $result;
    }, array());

    return $result_arr;
}
Salin selepas log masuk

Dalam fungsi ini, kami menggunakan fungsi tanpa nama untuk melaksanakan fungsi panggil balik semasa merentasi tatasusunan, jika nilai $group_key elemen semasa belum ditambah lagi Kepada tatasusunan berbilang dimensi baharu, kami mencipta elemen tatasusunan baharu sebagai kuncinya, dan kemudian menambah elemen semasa kepada nilai tatasusunan baharu ini. Semasa keseluruhan proses, parameter pertama $result fungsi panggil balik akan terus diubah suai dan diluluskan sehingga akhirnya tatasusunan pemilihan berbilang dimensi yang diproses dikembalikan.

Gunakan fungsi ini untuk menukar tatasusunan satu dimensi:

$data = array(
    array("id" => 1, "name" => "Tom", "group" => "A"),
    array("id" => 2, "name" => "Jerry", "group" => "A"),
    array("id" => 3, "name" => "John", "group" => "B"),
    array("id" => 4, "name" => "Smith", "group" => "C"),
);
Salin selepas log masuk

menjadi tatasusunan berbilang dimensi mengikut kekunci "kumpulan":

$result = group_array($data, "group");
print_r($result);
Salin selepas log masuk

Hasil output ialah:

Array
(
    [A] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [name] => Tom
                    [group] => A
                )

            [1] => Array
                (
                    [id] => 2
                    [name] => Jerry
                    [group] => A
                )

        )

    [B] => Array
        (
            [0] => Array
                (
                    [id] => 3
                    [name] => John
                    [group] => B
                )

        )

    [C] => Array
        (
            [0] => Array
                (
                    [id] => 4
                    [name] => Smith
                    [group] => C
                )

        )

)
Salin selepas log masuk

Kesimpulan

Penukaran tatasusunan berbilang dimensi dan tatasusunan satu dimensi dalam PHP ialah keperluan yang sering kita hadapi dalam pembangunan harian. Kita boleh menggunakan fungsi rekursif atau fungsi tertib lebih tinggi untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi atau menukar tatasusunan satu dimensi kepada tatasusunan berbilang dimensi. Dalam aplikasi praktikal, kita perlu memilih kaedah yang berbeza mengikut situasi yang berbeza dan menggunakan fungsi yang sesuai untuk melengkapkan penukaran.

Atas ialah kandungan terperinci Bagaimana untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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