У меня есть список категорий в MySQL с родительским идентификатором. Как создать массив PHP из списка.
ID Category Parent_ID 1 Car NULL 2 Education NULL 3 Mathematics 2 4 Physics 2 5 Astrophysics 4
Я хочу создать массив этой структуры
array( "Car" => "1", "Education" => array("Mathematics" => "2", "Physics" => array("Astrophysics" => "4")) );
На самом деле, ключ / значение не важны, так как я буду работать с другими столбцами. Я просто хочу знать, как отсканировать список и создать многоуровневый список.
Очень простая рекурсия для построения древовидной структуры:
function buildTree(array $data, $parent = null) { $branch = array(); foreach ($data as $row) { if ($row['parent_id'] == $parent) { $row['children'] = buildTree($data, $row['id']); $branch[] = $row; } } return $branch; } $tree = buildTree($rowsFromDatabase);
Наличие явного 'children'
ключа обычно предпочтительнее структуры, которую вы предлагаете, но не стесняйтесь изменять по мере необходимости.