Recursie și structuri multidimensionale în PHP
Se dă un array multidimensional cu un nivel arbitrar de imbricare, de exemplu, acesta:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
După cum puteți vedea, acest array are o structură complexă, iar se presupune că această structură poate fi arbitrară și nivelurile de imbricare pot fi oricât de adânci.
Să presupunem că vrem să afișăm toate elementele primitive (adică, care nu sunt array-uri) ale array-ului nostru. În acest caz, pentru a parcurge un astfel de array nu vom putea folosi bucle, deoarece array-ul are o structură neregulată și un nivel de imbricare necunoscut.
În schimb, pentru a parcurge un astfel de array este foarte convenabil să folosim recursia.
Pentru început, să creăm o funcție care primește ca parametru array-ul nostru, iar în funcție să facem o buclă pentru a parcurge array-ul:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Bucla pe care am făcut-o va parcurge doar
elementele array-ului principal. Adică la început
va afișa 1, apoi [2, 7, 8],
și apoi [3, 4, [5, [6, 7]].
Acum, să separăm în buclă elementele primitive de elementele care sunt array-uri:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// elementul este un array
} else {
// elementul este un primitiv
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Și acum, să facem astfel încât, dacă elementul nostru este un array, funcția să se autoapeleze, transmitând ca parametru acel array:
<?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]]]]);
?>
Se dă un array multidimensional cu un nivel arbitrar de imbricare, de exemplu, acesta:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Folosind recursia, afișați toate elementele primitive ale acestui array pe ecran.