За последние 24 часа нас посетили 17775 программистов и 1720 роботов. Сейчас ищут 918 программистов ...

древовидный массив

Тема в разделе "PHP для новичков", создана пользователем Иван kali, 30 мар 2017.

  1. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    я посмотрел. Вопрос по другому.
    Каким образом ты хочешь решить свою задачу? Какая задумка твоего кода?
     
    Иван kali нравится это.
  2. Иван kali

    Иван kali Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    50
    Симпатии:
    1
    error_reporting(E_ALL) и так не выводит )
    первый раз чёт написать пытаюсь, вот оттуда и код..
    Думал надо как то пройтись по массиву и проверить есть ли ключ [childs] если есть — доставать все [childs] которые лежат в 1

    $list_category = list_category($categories_tree, $category_id); вроде сохранил вывод ))
    а на счёт параметров можно прям носом ткнуть? и почему 2 параметр (category_id?) должен по умолчанию значение иметь? он же из GET приходит.. если есть делаем, нет проходим мимо? )
     
    #27 Иван kali, 30 мар 2017
    Последнее редактирование: 30 мар 2017
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Значение по умолчанию может быть равно и null. Потому что в программировании, когда у функции есть параметры, они все должны быть переданы, если для них не определено значение по умолчанию в сигнатуре функции.

    Перед ним желательно прописать
    PHP:
    1. ini_set('display_errors', 1);
    --- Добавлено ---
    И тут почитай: http://phpfaq.ru/debug
     
    Иван kali нравится это.
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    я вот понять не могу, нахера ты GETотм передаешь ключ и ищешь потом элемент массива с этим ключом. Можно же сразу в get все ключи положить и ничего не искать, а сразу обратиться к нужному элементу.
    Или я что-то не правильно понял?
     
    Иван kali нравится это.
  5. Иван kali

    Иван kali Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    50
    Симпатии:
    1
    если б я знал )) вобще все ключи и лежат в GET, а для функции я проверяю - если есть в GET ключ, я его ложу в переменную и передаю в функцию.. вроде так

    прописал
    ini_set('display_errors', 1);
    error_reporting(E_ALL)
    и добавил в функции
    if(!$category_id) return false;
    всё равно выдаёт ошибку если в Get нету id.. может в предыдущей функции где то не проверил, потом поищу. спасибо
     
    #30 Иван kali, 31 мар 2017
    Последнее редактирование: 31 мар 2017
  6. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    функция действительно хороша
     
  7. Иван kali

    Иван kali Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    50
    Симпатии:
    1
    вроде получилось у меня :rolleyes:
    Код (Text):
    1.  
    2. function list_category($array, $category_id){
    3.     if(!$category_id) return false;
    4.  
    5.     foreach($array as $item){
    6.         if($item['parent_id'] == $category_id){
    7.             $data .= $item['category_id'] . ",";
    8.          
    9.         }
    10.     }
    11.     return $data;
    12. }
    достаёт id детей
    но на вход не древовидный массив подается, а обычный

    всем спасибо за помощь! и за терпение ))
     
    #32 Иван kali, 31 мар 2017
    Последнее редактирование: 31 мар 2017
  8. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    http://jqueryui.com/menu/ вот посмотри, подключи библиотеку, накинь свои стили и радуйся)
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Хоспаде... эти ваши меню на чистом CSS делаются. С анимациями, блекджеком и курвами. Тут-то JQ на кой?
     
  10. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    https://codepen.io/quzziy/pen/NqwPwZ на , на , не дерись толька, а из библиотеки я не меню юзал)
     
  11. Иван kali

    Иван kali Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    50
    Симпатии:
    1
    и снова я ) :facepalm:
    Код (Text):
    1.  
    2. function list_category($array, $category_id){
    3.     if(!$category_id) return false;
    4.  
    5.     foreach($array as $item){
    6.         if($item['parent_id'] == $category_id){
    7.        
    8.             $data .= $item  . ",";
    9.   }
    10.     }
    11.     return $data;
    12. }
    возвращает строку array, array. как поправить что бы эти два массива развернулись?

    проще тогда joomla или WP установить. совсем проще будет )
     
  12. Иван kali

    Иван kali Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    50
    Симпатии:
    1
    читал, на php.нет эти функции вроде аналогичны )
    // Добавлять в отчет все PHP ошибки (см. список изменений)
    error_reporting(E_ALL);

    // Добавлять в отчет все PHP ошибки
    error_reporting(-1);
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А еще есть уточнения интересные:
    В общем, лучше юзать предопределенные константы, а не играться с битовыми представлениями. Скажем так, надежнее оно и однозначнее.
     
    Иван kali нравится это.
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    потому что в $item - массив. Нужно пихать в строку его поля, а не его целиком. ПХП не может за тебя додумать, какое поле пихнуть в строку, поэтому пишет, что это массив =)
     
  15. Иван kali

    Иван kali Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    50
    Симпатии:
    1
    чёт ничего не получается у меня )
    как вобще делается вывод категорий? может я изначально не туда пошёл:
    http://demos.thesoftwareguy.in/category-tree-php/
    вот меню, нужно при обращении к hardware вывести на экран printers & monitors.
     
  16. Иван kali

    Иван kali Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    50
    Симпатии:
    1
    Код (Text):
    1.  
    2. function childs($array, $category_id = 0) {
    3. foreach ($array as $element) {
    4.         if ($element['category_id'] == $category_id) {
    5.             $data = $element['childs'];
    6.            
    7.    }
    8.  }
    9.  return $data;
    10. }
    вот как тут теперь рекурсию вызвать или что сделать, что бы он вошел в $element['childs'] => он массив и там сделал тоже самое
    childs($element['childs'], $category_id) пробовал в else добавлять, но чет никак
     
  17. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    тебе филя еще хз когда показал как. Проверяешь, является ли элемент массива массивом и если да, то заражаешь рекурсию.
     
  18. Иван kali

    Иван kali Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    50
    Симпатии:
    1
    так я и говорю не получается у меня её правильно вызвать..
     
  19. Иван kali

    Иван kali Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    50
    Симпатии:
    1
    решил с помощью запроса к базе
    сначала достал id нужных категорий с простого массива
    Код (Text):
    1.  
    2. function list_category($array, $category_id){
    3.     if(!$category_id) return false;
    4.         foreach($array as $item){
    5.         if($item['parent_id'] == $category_id){
    6.         $data .= $item['category_id']  . ",";
    7.   }}
    8.     return $data;
    9. }
    и потом с базы вытащил свои массивы

    Код (Text):
    1.  
    2. function childs($list_category = false){
    3.     if($list_category){
    4.         $query = "SELECT * FROM category WHERE category_id IN($list_category)";
    5.     }else{
    6.         $query = "SELECT * FROM category ";
    7.     }
    8.     $res = mysql_query($query) ;
    9.     $category = array();
    10.     while($row = mysql_fetch_assoc($res)){
    11.         $category] = $row;
    12.     }
    13.     return $category
    14. }
    но с массивом было бы интересно разобраться, как пройти по дереву и переходить в рекурсии из одного массива в другой. если кто то уделит 15 минут и напишет функцию, буду примного благодарен за урок )

    всем спасибо! отдельное спасибо Fell-x и alexblack )