Дерево в массив
$db = new PDO("mysql:host=mysql;dbname=php-test;charset=utf8","root","root");
$categories = $db->query('SELECT * FROM categories')->fetchAll(PDO::FETCH_ASSOC);
function makeTree($array, $p_id=0){
$result = [];
foreach ($array as $item){ // перебираем каждый эллемент массива
if($item['p_id'] == $p_id){ // если p_id эллемента равет p_id заданному $p_id то...
$tempArr = makeTree($array,$item['id']); // ... то вызываем рекурсивно функцию makeTree и передаём $item['id'] как $p_id для последующих циклов
if (!empty($tempArr)){
$result[$item['name']] = $tempArr; // если массив $tempArr не пустой, то добавляем его в результат
}else{
$result[] = $item['name']; // если массив пустой, то просто добавляем имя эллемента
}
}
}
return $result;
}
$tree = makeTree($categories);
echo "<pre>";
print_r($tree);
echo "</pre>";
Last updated