Ho guardato in Internet e non ho ancora trovato quello che sto cercando. Ho una matrice piatta con ogni elemento contenente un 'id' e un 'parent_id'. Ogni elemento avrà un solo genitore, ma potrebbe avere più figli. Se parent_id = 0, viene considerato un elemento di livello root. Sto cercando di ottenere il mio array piatto su un albero. Gli altri esempi che ho trovato copiano solo l'elemento sul genitore, ma l'originale esiste ancora.Creare un albero da un array piatto in PHP
EDIT
Ogni elemento della matrice di partenza viene letto da un file XML separato. Il file stesso avrà '0' come valore per parent_id se non ha un genitore. I tasti sono in realtà stringhe.
Mi dispiace per la confusione precedente. Speriamo che questo sia più chiaro:
/EDIT
La mia matrice di partenza:
Array ( [_319_] => Array ( [id] => 0 [parent_id] => 0 ) [_320_] => Array ( [id] => _320_ [parent_id] => 0 ) [_321_] => Array ( [id] => _321_ [parent_id] => _320_ ) [_322_] => Array ( [id] => _322_ [parent_id] => _321_ ) [_323_] => Array ( [id] => _323_ [parent_id] => 0 ) [_324_] => Array ( [id] => _324_ [parent_id] => _323_ ) [_325_] => Array ( [id] => _325_ [parent_id] => _320_ ) )
La matrice risultante dopo che l'albero è fatto:
Array ( [_319_] => Array ( [id] => _319_ [parent_id] => 0 ) [_320_] => Array ( [id] => _320_ [parent_id] => 0 [children] => Array ( [_321_] => Array ( [id] => _321_ [parent_id] => _320_ [children] => Array ( [_322_] => Array ( [id] => _322_ [parent_id] => _321_ ) ) ) [_325_] => Array ( [id] => _325_ [parent_id] => _320_ ) ) [_323_] => Array ( [id] => _323_ [parent_id] => 0 [children] => Array ( [_324_] => Array ( [id] => _324_ [parent_id] => _323_ ) ) )
Qualsiasi aiuto/consiglio è molto apprezzato!
Alcuni codice che ho finora:
function buildTree(array &$elements, $parentId = 0) { $branch = array(); foreach ($elements as $element) { if ($element['parent_id'] == $parentId) { $children = $this->buildTree($elements, $element['id']); if ($children) { $element['children'] = $children; } $branch[] = $element; } } return $branch; }
Sono confuso. Ci stai solo chiedendo di scrivere il codice che prende il tuo pugno di array e sputa quello che hai nel secondo array? – MetalFrog
Sì ... qual è la domanda qui? –
In breve, credo di si. Ho esaminato vari altri esempi qui su StackOverflow e su altri blog/forum. Ma quando li ho provati non funzionano. – DSkinner