Qualcuno può aiutarmi con un po 'di codice o istruzioni su come camminare in modo ricorsivo su un array e quando si raggiunge l'ultimo elemento stampare il percorso completo ad esso? Un semplice eco funzionerà perché adatterò il codice ad un'altra funzione che sto sviluppando.Cammina l'array in modo ricorsivo e stampa il percorso del cammino
La funzione non deve calcolare la dimensione di matrice perché questo parametro sarà passata:
Esempio:
$depth = 8;
$array[1][3][5][6][9][5][8][9];
Quando la funzione reachs l'elemento 8 è stampare tutto il relativo percorso:
//print path
'1 -> 3 -> 5 -> 6 -> 9 -> 5 -> 8 -> 9'
Come ho detto, solo la stampa in questo formato funzionerà causa lo farò implementare il codice in qualche altra funzione.
le chiavi di matrice possono avere lo stesso valore. Ovviamente non lo stesso valore nella stessa sequenza per l'intero arary.
Aggiornato:
Passeggiata in modo ricorsivo Funzione:
$someArray[1][2][3] = 'end';
$someArray[1][2][6] = 'end';
$someArray[1][3][6] = 'end';
$someArray[4][3][7] = 'end';
function listArrayRecursive(&$array_name, $ident = 0){
if (is_array($array_name)){
foreach ($array_name as $k => &$v){
if (is_array($v)){
for ($i=0; $i < $ident * 10; $i++){ echo " "; }
echo $k . " : " . "<br>";
listArrayRecursive($v, $ident + 1);
}else{
for ($i=0; $i < $ident * 10; $i++){ echo " "; }
echo $k . " : " . $v . "<br>";
}
}
}else{
echo "Variable = " . $array_name;
}
}
listArrayRecursive($someArray);
stamperà:
1 :
2 :
3 : end
6 : end
3 :
6 : end
4 :
3 :
7 : end
Ora, come posso anche stampare il percorso della matrice ogni volta che raggiunge la fine? Per esempio:
1 :
2 :
3 : end : path -> 1,2,3
6 : end : path -> 1,2,6
3 :
6 : end : path -> 1,3,6
4 :
3 :
7 : end : path -> 4,3,7
codice modificato AGGIUNTA DI UN PARAM TERZO per registrare il percorso:
$someArray[1][2][3] = 'end';
$someArray[1][2][6] = 'end';
$someArray[1][3][6] = 'end';
$someArray[4][3][7] = 'end';
$someArray[3][2] = 'end';
function listArrayRecursive(&$array_name, $ident = 0, $path = null){
foreach ($array_name as $k => &$v){
if (is_array($v)){
for ($i=0; $i < $ident * 10; $i++){ echo " "; }
echo $k . " : " . "<br>";
$path .= $k . ', ';
listArrayRecursive($v, $ident + 1, $path);
}else{
for ($i=0; $i < $ident * 10; $i++){ echo " "; }
echo $k . " : " . $v . ' - path -> ' . $path . "<br>";
}
}
}
listArrayRecursive($someArray);
stamperà:
1 :
2 :
3 : end - path -> 1, 2,
6 : end - path -> 1, 2,
3 :
6 : end - path -> 1, 2, 3,
4 :
3 :
7 : end - path -> 1, 4, 3,
3 :
2 : end - path -> 1, 4, 3,
Bene, è compito fondamentale di risolvere con la ricorsione. Che cosa hai provato? – zerkms
@zerkms in realtà ho questo codice per la ricorsione http://codepad.org/iyrcdfQP ma sono bloccato sulla parte per tracciare il percorso della chiave $ corrente. – Henrique
Puoi dare un esempio più chiaro, che dire di più elementi all'interno di una determinata profondità di array o se l'array non è nidificato come "$ profondità"? Che problema è questo risolvere? – salathe