- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Должно получиться дерево вида:
Но у меня получается такое
Выборку и сортировку делаю так:
Так же еще получаю "Undefined index: p_id" в строке: $dataset[$node['p_id']]['childs'][$id] = &$node;
Помогите разобраться!
p.s. скрин структуры таблицы
Одним запросом вы рекурсивную выборку не сделаете.
Делайте несколькими или храните в базе дерево в другом виде.
[umka], суть в том чтобы полученный массив в цикле перебрать, mapTree() и делает то самое дерево.
не могу понять причом выборка к дереву
Уберите &$node - не к делу, да и используете Вы это не вполне верно, используйте просто $node
В чем именно у Вас претензия? В Вашем же примере "как получается" есть childs, в последнем элементе.
Нотис с p_id у Вас видимо возникает при null-евых значениях p_id, судя по структуре таблицы они разрешены.
edogs, p_id - везде нули, NULL не может там быть это 100%
Почему &$node - не к делу?
И вот допустим три коммента, два дочерних
Почему вылетает Undefined index: p_id к этой строке: if (!$node['p_id']) {
edogs, p_id - везде нули, NULL не может там быть это 100%
Почему &$node - не к делу?
Судя по структуре таблицы - NULL там может быть, может случайно затесался.
&$node не к делу, потому что для него в данной ситуации нет никаких причин и Вы не совсем верно используете это, замените на $node.
Почему вылетает Undefined index: p_id к этой строке: if (!$node['p_id']) {
Непонятно на каком этапе оно это пишет. Сделайте var_dump перед этой строчкой и посмотрите состав массива $node - будет понятнее.
edogs, ошибку нашел, она заключается в том что комментов то 3, а цикл почемуто 4 раза выполняется... почему такое может быть?
может посоветуете, вообще как-то иначе переписать функцию?
сделал так:
теперь в конец массива добавляет лишний ["p_id"]=>0
Я лично использую вот такую функцию:
function build_hierarchy($arr, $id_key = 'id', $pid_key = 'parent_id') {
$structure = array();
while($elem = array_shift($arr)) {
if(isset($structure[ $elem[$id_key] ])) {
$elem['children'] = $structure[ $elem[$id_key] ];
unset($structure[ $elem[$id_key] ]);
} else
$elem['children'] = array();
if(isset($references[ $elem[$pid_key] ])) {
$references[ $elem[$pid_key] ]['children'][ $elem[$id_key] ] = $elem;
$references[ $elem[$id_key] ] =& $references[ $elem[$pid_key] ]['children'][ $elem[$id_key] ];
} else {
$structure[ $elem[$pid_key] ][ $elem[$id_key] ] = $elem;
$references[ $elem[$id_key] ] =& $structure[ $elem[$pid_key] ][ $elem[$id_key] ];
}
asort( $references );
}
return array($structure);
}
Выгружаю данные в переменную из SELECT например в $bigmass
Потом делаю:
$bigmass=build_hierarchy($bigmass,'id','rootid');
получаю дерево.
А потом уже делайте всё что хотите.
LEOnidUKG, ваша функция работает, спасибо
---------- Добавлено 09.03.2015 в 19:50 ----------
LEOnidUKG, я сделал так
и получаю такой массив на выходе:
обходить его приходится двойным foreach несчитая childs, как сделать так чтобы на выходе получать примерно такой массив:
ну т.е. убрать лишние индексы сразу чтоб потом не обходить их циклом...