Ռեկուրսիա և բազմաչափ կառուցվածքներ 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]]];
?>
Օգտագործելով ռեկուրսիա, ցուցադրեք այս զանգվածի բոլոր պարզ տարրերը էկրանին: