thể trùng lặp:
Converting an array from one to multi-dimensional based on parent ID valuesPHP Tạo một mảng đa chiều từ một mảng với dữ liệu quan hệ
Tôi đang làm việc trong PHP.
Tôi có mảng sau có dữ liệu quan hệ (mối quan hệ con mẹ).
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
)
)
tôi cần nó phải ở định dạng JSON này:
{
"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":[
]
}
]
}
]
}
]
}
Tôi biết tôi cần phải tạo ra một mảng đa chiều và chạy nó thông qua json_encode(). Tôi cũng tin rằng phương pháp này được sử dụng để làm điều này cần phải được đệ quy bởi vì dữ liệu thế giới thực có thể có một số lượng không rõ các cấp.
Tôi rất vui khi hiển thị một số phương pháp tiếp cận của tôi nhưng chúng không hoạt động.
Có ai có thể giúp tôi không?
Tôi được yêu cầu chia sẻ công việc của mình. Đây là những gì tôi đã thử nhưng tôi đã không nhận được rằng gần gũi với tôi không biết làm thế nào nó là hữu ích.
Tôi đã tạo một mảng chỉ là các mối quan hệ.
foreach($array as $k => $v){
$relationships[$v['id']] = $v['parent'];
}
Tôi nghĩ (dựa trên một bài đăng SO khác) đã sử dụng dữ liệu quan hệ này để tạo mảng đa chiều mới. Nếu tôi làm việc này, tôi sẽ làm việc để thêm nhãn "trẻ em" chính xác, v.v.
$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);
Định dạng ban đầu bạn đăng * là * một mảng đa chiều. Không nên làm việc trong mã hóa json? –
Ben Roux, Vâng, đó là một mảng đa chiều nhưng nó không có định dạng đúng để tạo ra JSON đó. – maestrojed
những gì bạn đã thử? đăng mã của bạn như thế nào bạn đang chuẩn bị mảng. – Sanjay