⊗ppPmRcMA 220 of 447 menu

Rekurze a multidimenzionální struktury v PHP

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

<?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 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 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 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]]]]); ?>

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

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

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

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout