Salve a tutti...
Sto letteralmente impazzendo, spero possiate darmi una mano a capire cosa c'e' che non va...
Cerchero' di essere chiaro...
Ho un array (di esempio):
codice:
$array = array("Etichetta 1" => "Nodo 1", "111" => array("Key 1" => "Valore 1",
"Key 2" => "Valore 2", "Key 3" => "Valore 3", "Key 4" => "Valore 4"),
"Etichetta 3" => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11), "Etichetta 4" =>
array("asd", "asdasdasd", "Etichetta" => array(100, 101, 102, 103, 104, "Nested" =>
array("prova 1", "prova 2", "prova 3", "prova 4", "prova 5"), 106, 107, 108, 109)),
"Etichetta 5" => array("Nodo vuoto"));
** PRINT_R per chiarezza**
Array
(
[Etichetta 1] => Nodo 1
[111] => Array
(
[Key 1] => Valore 1
[Key 2] => Valore 2
[Key 3] => Valore 3
[Key 4] => Valore 4
)
[Etichetta 3] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
[10] => 11
)
[Etichetta 4] => Array
(
[0] => asd
[1] => asdasdasd
[Etichetta] => Array
(
[0] => 100
[1] => 101
[2] => 102
[3] => 103
[4] => 104
[Nested] => Array
(
[0] => prova 1
[1] => prova 2
[2] => prova 3
[3] => prova 4
[4] => prova 5
)
[5] => 106
[6] => 107
[7] => 108
[8] => 109
)
)
[Etichetta 5] => Array
(
[0] => Nodo vuoto
)
)
Organizzazione gerarchica, ci sono alcuni nodi-padre con sotto-nodi, ecc... niente di che ...
Mi serve una funzione che aggiunga un figlio al nodo che ha come etichetta quella che gli viene specificata.
Avevo pensato a una cosa del genere:
codice:
function aggiungi_figlio(&$albero, $padre, $figlio)
{
$point = &$albero;
foreach ($point as $key => $value) {
$point = &$albero[$key];
if ($key == $padre) {
if (is_array($point))
$point[] = $figlio;
else
$point = array($value, $figlio);
return $albero;
} else
if (is_array($value)) {
aggiungi_figlio($point, $padre, $figlio);
}
}
}
Ma non va ... ossia, funziona benissimo se il nodo padre è al primo livello, il problema e' la ricorsione... e' tutto li', non va bene questo pezzo:
codice:
else
if (is_array($value)) {
aggiungi_figlio($point, $padre, $figlio);
}
Ma non riesco a capire cosa c'e' che non va...
Andiamo passo passo:
Dopo aver dichiarato l'array nell'esempio, chiamo la funzione cosi':
codice:
$array = aggiungi_figlio($array, "Etichetta 5", "Aggiunto!!!");
A questo punto parte la funzione... gli vene dato l'intero array. Per prima cosa crea un riferimento al punto in cui siamo nell'albero, chiamato $point. Poi scorre i vari elementi di quel livello dell'albero e se trova una corrispondenza con il valore del nodo padre che gli ho indicato, lo aggiunge. Fin qui funziona, come dicevo. Il problema e' che se non lo trova, deve verificare se ognuno dei figli che ha passato in rassegna è o no un array. Se e' un array, ovviamente, parte la ricorsione.
Il problema e' li'. La cosa che mi e' venuta da fare e' semplicemente ripassare alla stessa funzione il riferimento $point al punto in cui eravamo arrivati nello scorrere l'albero. Quindi in teoria lui, ricorsivamente, crea un altro puntatore al sotto-ramo, e rifa' tutto da capo. Ma non va... mi sa che c'è qualche problema col puntatore, nel senso che finito un ramo lui non torna indietro, ma ho usato proprio per questo sempre la stessa variabile $point, in modo che i vari cicli nidificati riscrivessero sempre la stessa variabile di "puntamento"...
Help please!