Αναδρομή και Πολυδιάστατες Δομές στην 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]]];
?>
Χρησιμοποιώντας αναδρομή, εμφανίστε όλα τα πρωταρχικά στοιχεία αυτού του πίνακα στην οθόνη.