Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk menentukan dimensi tatasusunan dalam php

Bagaimana untuk menentukan dimensi tatasusunan dalam php

PHPz
PHPzasal
2023-04-27 09:11:471124semak imbas

Array ialah salah satu jenis data yang paling biasa dalam PHP. Melalui tatasusunan, anda boleh menggabungkan set data dengan cara tertentu untuk memudahkan pengendalian dan pengurusan data kami. Dimensi tatasusunan ialah cara untuk kami mengklasifikasikan dan menerangkan tatasusunan.

Dalam PHP, dimensi tatasusunan diterangkan berdasarkan struktur bersarang elemen tatasusunan. Jika tatasusunan mengandungi hanya satu elemen, dimensi tatasusunan ialah 1, contohnya:

$arr = array(1, 2, 3, 4);
echo count($arr); // 输出 4

Tatasusunan di atas hanya mengandungi satu elemen, jadi dimensinya ialah 1 dan panjang tatasusunan ialah 4.

Jika tatasusunan mengandungi elemen tatasusunan lain, dimensi tatasusunan menjadi bilangan peringkat yang mengandungi tatasusunan bersarang. Contohnya:

$arr2 = array(
    1, 
    array(
        2, 
        array(3, 4), 
        5
    ),
    6,
    array(7, 8)
);
echo count($arr2); // 输出 4

Tatasusunan di atas mengandungi dua tatasusunan bersarang, jadi dimensinya ialah 2 dan panjang tatasusunan ialah 4.

Jadi bagaimana untuk menentukan dimensi tatasusunan? Berikut ialah beberapa kaedah:

1 Gunakan rekursi untuk menentukan dimensi tatasusunan

Rekursi ialah idea yang digunakan secara meluas dalam sains komputer, yang boleh memproses data bersarang berbilang peringkat. Kita boleh menggunakan rekursi untuk menentukan dimensi tatasusunan Kodnya adalah seperti berikut:

// 递归计算数组维度
function getDimension($arr)
{
    if (!is_array($arr)) {
        return 0;
    } else {
        $max = 0;
        foreach ($arr as $subArr) {
            $subArrDimension = getDimension($subArr);
            if ($subArrDimension > $max) {
                $max = $subArrDimension;
            }
        }
        return $max + 1;
    }
}

Fungsi di atas getDimension($arr) boleh menerima sebarang tatasusunan dan mengira dimensi tatasusunan secara rekursif. Antaranya, is_array($arr) digunakan untuk menentukan sama ada elemen adalah jenis tatasusunan Jika ia bukan jenis tatasusunan, 0 dikembalikan, menunjukkan bahawa dimensi elemen ialah 0. Jika ia adalah jenis tatasusunan, ulangi elemen tatasusunan, mengira secara rekursif dimensi subarraynya setiap kali, dan akhirnya kembalikan dimensi terbesar dalam subarray.

2. Gunakan foreach bersarang untuk menentukan dimensi tatasusunan

Malah, kita juga boleh menentukan dimensi tatasusunan melalui gelung foreach bersarang. Jika semua elemen tatasusunan bukan jenis tatasusunan, dimensinya ialah 1 jika ia mengandungi unsur-unsur jenis tatasusunan, dimensinya adalah sama dengan dimensi subarray terdalam tambah 1. Kodnya adalah seperti berikut:

// 使用 foreach 嵌套计算维度
function getDimension2($arr)
{
    if (!is_array($arr)) {
        return 0;
    } else {
        $depth = 1;
        foreach ($arr as $subArr) {
            if (is_array($subArr)) {
                $subArrDepth = getDimension2($subArr) + 1;
                if ($subArrDepth > $depth) {
                    $depth = $subArrDepth;
                }
            }
        }
        return $depth;
    }
}

Kod di atas mentakrifkan fungsi getDimension2($arr), yang dikira dengan cara yang sama seperti getDimension($arr), tetapi menggunakan gelung foreach bersarang. Antaranya, jika elemen bukan jenis tatasusunan, 0 dikembalikan secara langsung jika ia adalah jenis tatasusunan, setiap elemen dilalui, dimensi subarray paling dalam dikira, dan kemudian 1 ditambah kepadanya.

3. Gunakan fungsi array_filter untuk menentukan dimensi tatasusunan

Fungsi terbina dalam PHP array_filter() boleh digunakan untuk menapis elemen dalam tatasusunan yang tidak memenuhi syarat dan mengembalikan tatasusunan baharu berdasarkan hasil penapisan. Kita boleh menggunakan ini untuk menentukan dimensi tatasusunan. Kodnya adalah seperti berikut:

// 使用 array_filter 函数计算维度
function getDimension3($arr)
{
    if (!is_array($arr)) {
        return 0;
    } else {
        $child = current($arr);
        $notEmpty = array_filter($arr);
        if (count($notEmpty) == 0) {
            return 1;
        } else {
            return is_array($child) ? getDimension3($child) + 1 : 1;
        }
    }
}

Kod di atas mentakrifkan fungsi getDimension3($arr), yang menggunakan fungsi array_filter(). Antaranya, gunakan current($arr) untuk mengeluarkan elemen pertama dalam tatasusunan dan tentukan sama ada elemen itu daripada jenis tatasusunan. Jika ia bukan jenis tatasusunan, dimensi tatasusunan ialah 1 jika ia adalah jenis tatasusunan, gunakan array_filter($arr) untuk menapis semua elemen kosong dalam tatasusunan dan tentukan panjang tatasusunan berdasarkan panjang tatasusunan; tatasusunan baru dikembalikan.

4. Gunakan fungsi str_repeat untuk menentukan dimensi tatasusunan

Satu lagi kaedah mudah ialah menentukan dimensi tatasusunan melalui perubahan dalam panjang rentetan. Pelaksanaan khusus adalah seperti berikut:

// 使用 str_repeat 函数计算维度
function getDimension4($arr)
{
    $temp = $arr;
    $i = 0;
    while (is_array($temp)) {
        $temp = current($temp);
        $i++;
        $str = str_repeat('.', $i);
        echo '<pre class="brush:php;toolbar:false">'.$str.implode($str, $temp).'
';     }     return $i; }

Kod di atas mentakrifkan fungsi getDimension4($arr), yang menggunakan fungsi current() dan str_repeat() dalam PHP. Gunakan gelung sementara di dalam fungsi untuk terus melintasi subarray bersarang dalam tatasusunan, mencetak rentetan jarak setiap kali ia melintasi, dan akhirnya mengembalikan nilai i.

Di atas ialah beberapa cara untuk menentukan dimensi tatasusunan, antaranya kaedah pelaksanaan rekursi dan foreach lebih biasa digunakan. Pembangun boleh memilih untuk menggunakan kaedah yang berbeza untuk melaksanakannya mengikut situasi sebenar.

Atas ialah kandungan terperinci Bagaimana untuk menentukan dimensi tatasusunan 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