Powiel możliwe:
Converting an array from one to multi-dimensional based on parent ID valuesPHP Tworzenie tablicy wielowymiarowej z tablicy z danymi relacyjnymi
Pracuję w PHP.
Mam następujące tablica, która ma relacyjnych danych (relacje potomka podrzędne).
Array
(
[5273] => Array
(
[id] => 5273
[name] => John Doe
[parent] =>
)
[6032] => Array
(
[id] => 6032
[name] => Sally Smith
[parent] => 5273
)
[6034] => Array
(
[id] => 6034
[name] => Mike Jones
[parent] => 6032
)
[6035] => Array
(
[id] => 6035
[name] => Jason Williams
[parent] => 6034
)
[6036] => Array
(
[id] => 6036
[name] => Sara Johnson
[parent] => 5273
)
[6037] => Array
(
[id] => 6037
[name] => Dave Wilson
[parent] => 5273
)
[6038] => Array
(
[id] => 6038
[name] => Amy Martin
[parent] => 6037
)
)
Muszę go mieć w tym formacie JSON:
{
"id":"5273",
"name":"John Doe",
"data":{
},
"children":[
{
"id":" Sally Smith",
"name":"6032",
"data":{
},
"children":[
{
"id":"6034",
"name":"Mike Jones",
"data":{
},
"children":[
{
"id":"6035",
"name":"Jason Williams",
"data":{
},
"children":[
{
"id":"node46",
"name":"4.6",
"data":{
},
"children":[
]
}
]
}
]
},
{
"id":"6036",
"name":"Sara Johnson",
"data":{
},
"children":[
]
},
{
"id":"6037",
"name":"Dave Wilson",
"data":{
},
"children":[
{
"id":"6038",
"name":"Amy Martin",
"data":{
},
"children":[
]
}
]
}
]
}
]
}
wiem, że trzeba utworzyć tablicę wielowymiarową i uruchomić go za pośrednictwem json_encode(). Sądzę też, że metoda używana do tego musi być rekurencyjna, ponieważ dane z rzeczywistego świata mogą mieć nieznaną liczbę poziomów.
Byłbym szczęśliwy pokazując niektóre z moich podejść, ale nie zadziałały.
Czy ktoś może mi pomóc?
Zostałem poproszony o udostępnienie mojej pracy. Tego właśnie próbowałem, ale nie zbliżyłem się tak bardzo, że nie wiem, jak to jest pomocne.
Zrobiłem szereg tylko relacji.
foreach($array as $k => $v){
$relationships[$v['id']] = $v['parent'];
}
Myślę, że (w oparciu o inne stanowisko SO) wykorzystał te dane relacyjne do stworzenia nowej wielowymiarowej tablicy. Jeśli mam to do pracy jadę do pracy na dodanie w poprawnych „dzieci” etykiet itp
$childrenTable = array();
$data = array();
foreach ($relationships as $n => $p) {
//parent was not seen before, put on root
if (!array_key_exists($p, $childrenTable)) {
$childrenTable[$p] = array();
$data[$p] = &$childrenTable[$p];
}
//child was not seen before
if (!array_key_exists($n, $childrenTable)) {
$childrenTable[$n] = array();
}
//root node has a parent after all, relocate
if (array_key_exists($n, $data)) {
unset($data[$n]);
}
$childrenTable[$p][$n] = &$childrenTable[$n];
}
unset($childrenTable);
print_r($data);
Początkowo opublikowany format * to * tablica wielowymiarowa. Czy ta praca nie powinna być kodowana w Json? –
Ben Roux, Tak, jest to tablica wielowymiarowa, ale nie jest w odpowiednim formacie, aby wyprodukować ten JSON. – maestrojed
co próbowałeś? opublikuj swój kod, przygotowując tablicę. – Sanjay