За последние 24 часа нас посетили 17552 программиста и 1926 роботов. Сейчас ищут 1313 программистов ...

Узнать конечные элементы во вложенностях

Тема в разделе "Прочие вопросы по PHP", создана пользователем Your, 5 авг 2014.

  1. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Всем хай!
    Короче я туплю уже, выручайте советом.
    Есть категории и под-категории:
    Как сделать так, чтобы ссылками были только конечные категории, а верхнии были обычным текстом, я никак не могу врубиться, то ли я сплю, то ли, что, но - это нужно решить сейчас...
    Есть рекурсия:
    Код (PHP):
    1. public static function recursive($id,$level=0) {
    2.     if(isset(self::$allCats[$id])) {
    3.         $str=self::strrpt('- ',$level);
    4.         foreach(self::$allCats as $val) {
    5.             if($id==$val['parentId']) {
    6.                 self::$return.=$str.$val['id'].$val['name'].'<br>';
    7.                 self::recursive($val['id'],$level+1);
    8.             }
    9.         }
    10.     }
    11. } 
    Она возвращает такие вещи и тут внимание!!!!, мне нужно все которые выделенные жирным сделать ссылками, то есть - это конечные категории в которых больше нет под-категорий:
    Тёплые полы
    - GREEN BOX
    - Национальный комфорт
    - - Маты под плитку одножильные
    - - Маты под плитку двужильные
    - - Маты под стяжку одножильные
    - - Маты под стяжку двужильныех

    - Теплолюкс
    - - Тёплый пол под стяжку одножильный
    - - Тёплый пол под плитку одножильный
    - - Тёплый пол под стяжку двужильный
    - - Тёплый пол под плитку двужильный

    - Теплофол-нано
    - Терморегуляторы
    - Теплодор
    - CALEO

    Все что выделено - это конечные категории в них нет под категорий, но они ей могут являться.
    Вот, что мне нужно дописать, какое условие? Задрачиваюсь уже 2 час, то блин недобор то еще какая - то хуйня получается, хочется это как то в одном методе сварганить и подать на блюдечке, есть мыслишки?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    у конечных видимо count(self::$allCats[$id]) == 0 ? Ну или так: empty(self::$allCats[$id])

    Добавлено спустя 2 минуты 1 секунду:
    другая мысль: array_walk_recursive() вызывает колбек-функцию для конечных узлов, но не для подмассивов.
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.593
    Симпатии:
    1.764
    Лучше один раз составить простой-простой, но медленный-медленный скрипт, который добавит к каждой категории количество "детей". И проверять потом. А вообще, я намучился в одном крупном проекте с традиционным parentID, на следующий уже перешёл на Nested Sets. Надоело на каждый чих рекурсивную функцию писать
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    artoodetoo, self::$allCats это все категории, так что там они в любом случае есть.
    а про валк не понял о чем ты имеешь ввиду?
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    проверять не все, а конкретную категорию self::$allCats[$i], если я конечно правильно понял

    array_walk_recursive исполняет пользовательскую процедуру только с конечными "листьями" многомерного массива. это можно использовать при подходящей структуре данных.
     
  6. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    РОДИЛ! ЕПОНА МАТРЕНА!
    [​IMG]
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    надо было изначально разделять "папки" и "файлы" =)
     
  8. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Это не папки и файлы, а массив.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    надо было изначально разделять "папки" и "файлы" в массиве. а в кавычках они написаны, потому что используются в переносном смысле. =)
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Так, в таком случае получается - это тоже самое. Тут дело такое, категории, товары и данные делятся все, но на части, сортируются и сохраняются. Потом, - это выводится когда запрашиваем, а не сразу все. По этому вопрос встал только конечные из всех полученных. =)
    А это нужно сделать за ранее...
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я б их все сделал ссылками. типа тыкнул на родителя - получи все товары его детей.