Rekursija un daudzdimensiju struktūras PHP
Dots masīvs ir daudzdimensiju ar patvaļīgu iedziļinājuma līmeni, piemēram, šāds:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Kā jūs redzat, šim masīvam ir sarežģīta struktūra, un tiek pieņemts, ka šī struktūra var būt patvaļīga, un iedziļinājuma līmeņi var būt tik dziļi, cik vēlas.
Pieņemsim, ka mēs vēlamies izvadīt uz ekrānu visus primitīvos (tas ir, ne masīvus) mūsu masīva elementus. Šajā gadījumā, lai pārlīstu šādu masīvu, mums vienkārši neizdosies izmantot ciklus, jo masīvam ir neregulāra struktūra un nezināms iedziļinājuma līmenis.
Taču, lai pārlīstu šādu masīvu, ļoti ērti varēs izmantot rekursiju.
Sākumā izveidosim funkciju, kurā parametrā padodam mūsu masīvu, un funkcijā izveidosim ciklu mūsu masīva pārlasei:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Mūsu izveidotais cikls pārlās tikai
pamata masīva elementus. Tas ir, sākumā
tas izvadīs 1, tad [2, 7, 8],
un pēc tam [3, 4, [5, [6, 7]].
Tagad cilpā sāksim atšķirt primitīvos elementus un masīvu elementus:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// elements - masīvs
} else {
// elements - primitīvs
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Un tagad panāksim, ka, ja mūsu elements ir masīvs, funkcija izsauktu pati sevi, padodot parametrā šo masīvu:
<?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]]]]);
?>
Dots daudzdimensiju masīvs ar patvaļīgu iedziļinājuma līmeni, piemēram, šāds:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Ar rekursijas palīdzību izvadiet visus primitīvos šī masīva elementus uz ekrāna.