Как создать многомерный массив из списка? - PullRequest
0 голосов
/ 25 октября 2011

У меня есть список категорий в 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"))
);

На самом деле ключ / значение не имеет значениякак я буду работать с другими колонками тоже.Я просто хочу знать, как сканировать список и создавать многоуровневый список.

1 Ответ

5 голосов
/ 25 октября 2011

Несколько очень простых рекурсий для построения древовидной структуры:

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' обычно предпочтительнее предлагаемой структуры, но не стесняйтесь изменять по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...