Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mencapai traversal tak terhingga tatasusunan dalam php

Bagaimana untuk mencapai traversal tak terhingga tatasusunan dalam php

PHPz
PHPzasal
2023-04-27 09:03:49725semak imbas

Dalam bahasa PHP, tatasusunan ialah jenis data yang sangat biasa. Selalunya kita perlu melintasi tatasusunan untuk mendapatkan semua elemen dalam tatasusunan. Pendekatan biasa ialah menggunakan pernyataan foreach untuk melintasi. Walau bagaimanapun, jika tatasusunan ialah tatasusunan berbilang dimensi, sarang menggunakan pernyataan foreach boleh menjadi rumit. Dalam kes ini, kita boleh menggunakan kaedah rekursif untuk melintasi tatasusunan secara tak terhingga.

1. Apakah rekursi?

Rekursi merujuk kepada gelagat fungsi yang memanggil dirinya sendiri semasa pelaksanaan. Fungsi rekursif ialah alat yang sangat berkuasa yang boleh digunakan untuk menyelesaikan banyak masalah kompleks, seperti traversal struktur pokok, traversal struktur graf, dll. Dalam bahasa PHP, fungsi rekursif dipanggil dengan cara yang sama seperti fungsi biasa, kecuali fungsi itu memanggil dirinya secara dalaman.

2. Merentasi tatasusunan dua dimensi secara rekursif

Dalam PHP, kita boleh menggunakan kaedah rekursif untuk melintasi tatasusunan berbilang dimensi secara tak terhingga. Berikut ialah contoh kod untuk merentasi tatasusunan dua dimensi secara rekursif:

function recursive_print_array($array) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            recursive_print_array($value);
        } else {
            echo $value . "\n";
        }
    }
}

Dalam fungsi ini, kita mula-mula melintasi setiap elemen tatasusunan:

foreach ($array as $key => $value)

dan kemudian semak sama ada elemen semasa ialah tatasusunan:

if (is_array($value))

Jika ia adalah tatasusunan, kami menggunakan kaedah rekursif untuk melintasi tatasusunan:

recursive_print_array($value);

Jika ia bukan tatasusunan, nilai elemen ini dikeluarkan secara langsung:

echo $value . "\n";

Ini Fungsi boleh merentasi tatasusunan dua dimensi tanpa had. Sila lihat kod contoh di bawah:

$array = array(
    'a' => array('b' => array('c' => 'd'), 'e' => 'f'),
    'g' => 'h',
    'i' => array('j' => array('k' => 'l'))
);

recursive_print_array($array);

Kod sampel ini akan mengeluarkan yang berikut:

d
f
h
l

3 Merentasi tatasusunan mana-mana dimensi

Kod sampel di atas boleh hanya merentasi tatasusunan dua dimensi, tetapi sebenarnya sama mudahnya untuk melintasi tatasusunan mana-mana dimensi secara rekursif. Berikut ialah contoh kod:

function recursive_traverse($array) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            recursive_traverse($value);
        } else {
            echo $value . "\n";
        }
    }
}

Fungsi ini pada asasnya sama dengan kod sampel di atas, kecuali nama dan nama parameter telah berubah. Fungsi ini boleh melintasi tatasusunan mana-mana dimensi secara rekursif.

Sila lihat kod sampel di bawah:

$array = array(
    'a' => array('b' => array('c' => array('d' => 'e', 'f' => 'g'))),
    'h' => 'i',
    'j' => array('k' => array('l' => array('m' => 'n')))
);

recursive_traverse($array);

Dalam kod sampel ini, kami mentakrifkan tatasusunan lima dimensi. Dengan menggunakan fungsi di atas, kita boleh lelaran melalui semua elemen tatasusunan ini. Berikut ialah output fungsi ini:

e
g
i
n

4. Ringkasan

Menggunakan kaedah rekursif untuk melintasi tatasusunan secara tak terhingga ialah alat yang sangat berkuasa. Selagi kita memahami konsep rekursi, kita boleh melintasi tatasusunan dimensi sewenang-wenangnya dengan mudah. Dalam pembangunan sebenar, kaedah rekursif biasanya digunakan untuk melintasi jenis data seperti struktur pokok dan struktur graf. Menguasai teknologi ini boleh menjadikan program kami lebih fleksibel dan cekap.

Atas ialah kandungan terperinci Bagaimana untuk mencapai traversal tak terhingga 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