⊗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
ვებსაიტის მუშაობის, ანალიტიკისა და პერსონალიზაციისთვის ვიყენებთ ქუქი-ფაილებს. მონაცემთა დამუშავება ხდება Კონფიდენციალურობის პოლიტიკის შესაბამისად.
ყველას მიღება პარამეტრები უარყოფა