Мне нужна помощь с приложением, которое я создаю.
У меня есть таблица, выглядит примерно так:
+----+-----------+---------+
| id | parent_id | name |
+----+-----------+---------+
| 1 | null | test |
+----+-----------+---------+
| 2 | null | test2 |
+----+-----------+---------+
| 4 | 1 | test3 |
+----+-----------+---------+
| 5 | 2 | test4 |
+----+-----------+---------+
И теперь я получаю все данные в одном массиве. Я хотел бы получить такую структуру (массив php как каскад):
array(
0 => array(
'id' => 1,
'parent_id' => null,
'name' => 'test',
'children' => array(
'id' => 4,
'parent_id' => 1,
'name' => 'test3'
)
),
1 => array(
'id' => 2,
'parent_id' => null,
'name' => 'test2',
'children' => array(
'id' => 5,
'parent_id' => 2,
'name' => 'test4'
)
)
)
Таким образом, каждая запись с «parent_id = null» будет родительской, а каждая запись с идентификатором «parent_id» будет в дочернем массиве.
Я начал это так:
$newArray = array();
foreach($names as $name) {
if($name['parent_id'] == null || $name['parent_id'] == 0) {
// entry is parent
$newArray[$name['id']] = $name['name'];
} else {
// entry is child
}
}
Но вот и мой конец, я не знаю, как это сделать. Я думаю, что я должен использовать какую-то рекурсивную функцию цикла, но я не знаю, как начать.
Было бы здорово, если бы кто-нибудь мог мне помочь.
С уважением,
Мэтт.
Вы можете использовать рекурсивную функцию, подобную этой (я только добавил код, который важен для понимания):
function get_children($parentId) {
$array = array();
//Load/Find $children
foreach($children as $child) {
$array[] = array(
'id' => $child->id,
'name' => 'YourName',
'children' => get_children($child->id)
);
}
return $array;
}
Если вы сохраняете данные в таком массиве, нет необходимости сохранять parent_id, потому что вы можете получить их, выполнив поиск по идентификатору родительских элементов.
Других решений пока нет …