Rekursi dan Struktur Multidimensi dalam PHP
Diberikan satu tatasusunan multidimensi dengan tahap bersarang arbitrari, contohnya seperti berikut:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Seperti yang anda lihat, tatasusunan ini mempunyai struktur yang kompleks, dan diandaikan bahawa struktur ini boleh menjadi arbitrari dan tahap bersarang boleh menjadi sangat dalam.
Katakan kita mahu mencetak semua elemen primitif (iaitu bukan tatasusunan) daripada tatasusunan kita ke skrin. Dalam kes ini, untuk mengulangi tatasusunan sedemikian, kita tidak boleh menggunakan gelung sahaja, kerana tatasusunan mempunyai struktur yang tidak teratur dan tahap bersarang yang tidak diketahui.
Walau bagaimanapun, untuk mengulangi tatasusunan sedemikian adalah sangat sesuai untuk menggunakan rekursi.
Pertama, mari buat fungsi, di mana kita akan menghantar tatasusunan kita sebagai parameter, dan dalam fungsi tersebut kita akan buat gelung untuk mengulangi tatasusunan kita:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Gelung yang kami buat hanya akan mengulangi
elemen-elemen tatasusunan utama. Iaitu, pada mulanya
ia akan mencetak 1, kemudian [2, 7, 8],
dan kemudian [3, 4, [5, [6, 7]].
Sekarang mari kita bezakan antara elemen primitif dan elemen tatasusunan dalam gelung:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// elemen - tatasusunan
} else {
// elemen - primitif
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Dan sekarang mari kita buat supaya jika elemen kita adalah tatasusunan, fungsi memanggil dirinya sendiri, dengan menghantar tatasusunan tersebut sebagai parameter:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
func($elem);
} else {
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Diberikan satu tatasusunan multidimensi dengan tahap bersarang arbitrari, contohnya seperti berikut:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Dengan menggunakan rekursi, cetak semua elemen primitif tatasusunan ini ke skrin.