Rekurzija i višedimenzionalne strukture u PHP-u

Dat je višedimenzionalni niz proizvoljnog nivoa ugnježdenosti, na primer, ovakav:

php<?php
  $arr = [
    1,
    [
      2, 7, 8
    ],
    [
      3, 4, [5, [6, 7]],
    ]
  ];
?>

Kao što vidite, ovaj niz ima složenu strukturu, i podrazumeva se da ova struktura može biti proizvoljna i nivoi ugnježdenosti mogu biti proizvoljno duboki.

Recimo da želimo da prikažemo sve primitivne (to jest, one koji nisu nizovi) elemente našeg niza. U ovom slučaju za prolazak kroz takav niz jednostavno ne možemo koristiti petlje, jer niz ima nepravilnu strukturu i nepoznati nivo ugnježdenosti.

Međutim, za prolazak kroz takav niz veoma zgodno će biti koristiti rekurziju.

Za početak, napravićemo funkciju u koju ćemo kao parametar proslediti naš niz, a u funkciji ćemo napraviti petlju za prolazak kroz naš niz:

php<?php
  function func($arr) {
    foreach ($arr as $elem) {
      echo $elem;
    }
  }
  
  func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>

Petlja koju smo napravili će prolaziti samo kroz elemente glavnog niza. To jest, prvo će ispisati 1, zatim [2, 7, 8], a potom [3, 4, [5, [6, 7]].

Hajde sada da u petlji razdvajamo elemente-primitive i elemente-nizove:

php<?php
  function func($arr) {
    foreach ($arr as $elem) {
      if (is_array($elem)) {
        // element je niz
      } else {
        // element je primitiv
        echo $elem;
      }
    }
  }
  
  func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>

A sada hajde da uradimo tako da, ako naš element jeste niz, funkcija poziva samu sebe, prosleđujući kao parametar taj niz:

php<?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]]]]);
?>
Задание 1

Dat je višedimenzionalni niz proizvoljnog nivoa ugnježdenosti, na primer, ovakav:

php<?php
  $arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>

Koristeći rekurziju, prikažite sve primitivne elemente ovog niza na ekranu.