Duplicar posibles:
Converting an array from one to multi-dimensional based on parent ID valuesPHP crear una matriz multidimensional de una matriz con datos relacionales
estoy trabajando en PHP.
Tengo la siguiente matriz que tiene datos relacionales (relaciones primarias secundarias).
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
)
)
necesito que sea en este formato 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":[
]
}
]
}
]
}
]
}
Sé que necesito para crear una matriz multidimensional y ejecutarlo a través json_encode(). También creo que este método utilizado para hacer esto debe ser recursivo porque los datos del mundo real podrían tener un número desconocido de niveles.
Estaría encantado de mostrar algunos de mis enfoques, pero no han funcionado.
¿Alguien me puede ayudar?
Me pidieron que compartiera mi trabajo. Esto es lo que he intentado, pero no me he acercado tanto a él que no sé lo útil que es.
Hice una serie de solo las relaciones.
foreach($array as $k => $v){
$relationships[$v['id']] = $v['parent'];
}
Creo que (basado en otra publicación SO) usé estos datos relacionales para crear una nueva matriz multidimensional. Si tengo que esto funcione iba a trabajar en la adición de las etiquetas correctas "niños" etc.
$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);
El formato inicial que publicó * es * una matriz multidimensional. ¿No debería funcionar eso en json? –
Ben Roux, sí, es una matriz multidimensional pero no está en el formato correcto para producir esa JSON. – maestrojed
¿Qué has intentado? publique su código de cómo está preparando la matriz. – Sanjay