Rekurze a multidimenzionální struktury v PHP

Je dáno multidimenzionální pole libovolné úrovně vnoření, například takové:

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

Jak vidíte, toto pole má složitou strukturu a předpokládá se, že tato struktura může být libovolná a úrovně vnoření mohou být libovolně hluboké.

Předpokládejme, že chceme vypsat na obrazovku všechny primitivní (tedy ne pole) prvky našeho pole. V tomto případě pro průchod takového pole prostě nemůžeme použít cykly, protože pole má nepravidelnou strukturu a neznámou úroveň vnoření.

Naopak pro průchod takového pole bude velmi výhodné použít rekurzi.

Nejprve vytvořme funkci, do které parametrem budeme předávat naše pole, a ve funkci vytvořme cyklus pro průchod našeho pole:

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

Cyklus, který jsme vytvořili, bude procházet pouze prvky hlavního pole. To znamená, že nejprve vypíše 1, potom [2, 7, 8], a potom [3, 4, [5, [6, 7]].

Nyní v cyklu oddělujme primitivní prvky a prvky-pole:

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

A nyní udělejme to, aby pokud je náš prvek pole, funkce zavolala sama sebe, a předala parametrem toto pole:

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

Je dáno multidimenzionální pole libovolné úrovně vnoření, například takové:

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

Pomocí rekurze vypište všechny primitivní prvky tohoto pole na obrazovku.