⊗ppPmRcMA 220 of 447 menu

Рекурсия и многомерни структури в PHP

Даден е многомерен масив с произволно ниво на влагане, например такъв:

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

Както виждате, този масив има сложна структура, като се предполага, че тази структура може да бъде произволна и нивата на влагане могат да бъдат произволно дълбоки.

Да предположим, че искаме да изведем на екрана всички примитивни (тоест не масиви) елементи на нашия масив. В този случай за обхождане на такъв масив просто няма да можем да използваме цикли, тъй като масивът има неправилна структура и неизвестно ниво на влагане.

Вместо това за обхождане на такъв масив ще бъде много удобно да използваме рекурсия.

Като начало ще направим функция, в която като параметър ще предаваме нашия масив, а във функцията ще направим цикъл за обхождане на нашия масив:

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

Цикълът, който направихме, ще обхожда само елементите на основния масив. Тоест първоначално той ще изведе 1, след това [2, 7, 8], а след това [3, 4, [5, [6, 7]].

Нека сега в цикъла да разделяме елементите-примитиви и елементите-масиви:

<?php function func($arr) { foreach ($arr as $elem) { if (is_array($elem)) { // елементът е масив } else { // елементът е примитив echo $elem; } } } func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]); ?>

И сега нека направим така, че ако нашият елемент е масив, функцията да извиква сама себе си, предавайки като параметър този масив:

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

Даден е многомерен масив с произволно ниво на влагане, например такъв:

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

С помощта на рекурсия изведете всички примитивни елементи на този масив на екрана.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικά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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне