⊗ppPmRcMA 220 of 447 menu

Rekursio ja moniulotteiset rakenteet PHP:ssä

Annettu taulukko on moniulotteinen mielivaltaisella sisäkkäisyystasolla, esimerkiksi tällainen:

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

Kuten näette, tällä taulukolla on monimutkainen rakenne, ja oletetaan, että tämä rakenne voi olla mielivaltainen ja sisäkkäisyystasot voivat olla miten syviä tahansa.

Oletetaan, että haluamme tulostaa kaikki primitiiviset (eli eivät taulukoita) elementit taulukostamme. Tässä tapauksessa tällaisen taulukon läpikäyntiin emme yksinkertaisesti pysty käyttämään silmukoita, koska taulukolla on epäsäännöllinen rakenne ja tuntematon sisäkkäisyystaso.

Sen sijaan tällaisen taulukon läpikäyntiin on erittäin kätevää käyttää rekursiota.

Aluksi teemme funktion, jolle parametrina annamme taulukkomme, ja funktiossa teemme silmukan taulukkomme läpikäyntiä varten:

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

Tekemämme silmukka käy läpi vain päätaulukon elementit. Eli aluksi se tulostaa 1, sitten [2, 7, 8], ja sitten [3, 4, [5, [6, 7]].

Erotellaan nyt silmukassa primitiivielementit ja taulukkoelementit:

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

Ja nyt tehdään niin, että jos elementtimme on taulukko, funktio kutsuu itseään, välittäen parametrina tämän taulukon:

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

Annettu moniulotteinen taulukko mielivaltaisella sisäkkäisyystasolla, esimerkiksi tällainen:

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

Käytä rekursiota tulostaaksesi kaikki primitiiviset elementit tästä taulukosta.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää