За последние 24 часа нас посетили 37803 программиста и 7849 роботов. Сейчас ищут 1752 программиста ...

Как правильно перебрать массив?

Тема в разделе "PHP для новичков", создана пользователем Volonter, 9 окт 2022.

Метки:
  1. Volonter

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

    С нами с:
    8 авг 2009
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Москва
    Добрый день, можно ли перебрать такой массив
    Array(
    [0] =>stdClassObject
    (
    [category_id] =>1
    [category_title] =>Первая категория
    [category_published] =>1
    [post_title] =>Статья первой категории
    [post_postid] =>28
    [post_category_id] =>1
    )

    [1] =>stdClassObject
    (
    [category_id] =>2
    [category_title] =>Вторая категория
    [category_published] =>1
    [post_title] =>Статья второй категории
    [post_postid] =>25
    [post_category_id] =>2
    )

    [2] =>stdClassObject
    (
    [category_id] =>2
    [category_title] =>Вторая категория
    [category_published] =>1
    [post_title] =>Статья второй категории
    [post_postid] =>29
    [post_category_id] =>2
    )
    )
    так что бы на выходе получить в html вот такой результат
    Первая категория
    - Статья первой категории
    Вторая категория
    - Статья второй категории
    - Статья второй категории

    Заранее благодарю!
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Можно, конечно. Но лучше сортировку по категории делать еще при запросе к БД. Тогда при выводе достаточно просто отслеживать смену id категории, чтобы выводить подзаголовок Первая категория и т.п.
     
  3. Volonter

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

    С нами с:
    8 авг 2009
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Москва
    да вот дело в том что нет доступов к беку, имеют только массив во вьюшке. Понятно что запрос не совсем правильно составлен, но имеем то что имеем. Я был бы очень признателен, если подскажете как перебрать))
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Говорю, это не норм. Возможно, можно уточнить запрос к беку.

    Код бесплатно не пишу, даже элементарный :)
    --- Добавлено ---
    Бек – явно отстой. Есть даже избыточность данных.
     
  5. Slava Rozhnev

    Slava Rozhnev Новичок

    С нами с:
    6 сен 2021
    Сообщения:
    87
    Симпатии:
    26
    Адрес:
    https://phpize.online
    PHP:
    1. usort($data, fn($a, $b)=>$a->category_id<=>$b->category_id);
    2.  
    3. $category = null;
    4.  
    5. foreach($data as $post) {
    6.     if ($category !== $post->category_id) {
    7.         echo $post->category_title . PHP_EOL;
    8.         $category = $post->category_id;
    9.     }
    10.     printf("\t %s \n", $post->post_title);
    11. }
    phpize
     
    Volonter и miketomlin нравится это.
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Лайк, хотя PHP_EOL with "\n" :(
     
  7. Volonter

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

    С нами с:
    8 авг 2009
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Москва
    Slava
    Спасибо! То что нужно!
     
  8. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    А что, где-то не работает "\n"? Давным-давно перестал понимать, зачем там было использовать два символа )
     
  9. Volonter

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

    С нами с:
    8 авг 2009
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Москва
    Без PHP_EOL
    PHP:
    1. usort($quizdata, fn($a, $b) => $a->category_id<=>$b->category_id);
    2.         $category = null;
    3.         foreach($quizdata as $post) {
    4.             if ($category !== $post->category_id) {
    5.                 echo '<strong>' . $post->category_title . '</strong><br />';
    6.                 $category = $post->category_id;
    7.             }
    8.             echo $post->post_title . '<br />';
    9.         }
    Slava еще раз спасибо!
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    @don.bidon, ну просто как-то нелепо показанное смотрится вместе. И PHP_EOL все же может быть не тождественно "\n". Глубже не копал ;)
    --- Добавлено ---
    В печатных машинках и древних принтерах это были два разных действия :D
     
  11. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Константа PHP_EOL актуальна для вывода в файл. Подменяется на признак конца строки, принятый в конкретной операционной системе, в которой выполняется сервер.
    Для вывода в браузер, эта константа бесполезна (за исключением, пожалуй, форматирования исходника html, что, впрочем, тоже спорно).
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    @Sail, я в курсе, спасибо. Резанул разный подход в одном выводе. Ожидал либо то, либо то. Understand?
     
  13. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    То понятно, просто блокнот в Win 10 корректно отображает файл с LF (и даже UTF-8 без BOM). Если MacOS до сих пор не умеет, ССЗБ.
     
  14. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    183
    А порядок элементов строгий или разбросанный?
     
  15. Slava Rozhnev

    Slava Rozhnev Новичок

    С нами с:
    6 сен 2021
    Сообщения:
    87
    Симпатии:
    26
    Адрес:
    https://phpize.online
    Спасибо за критику. Это я так на коленке набросал. В реальном случае вообще <br> нужен.
    Присоединяйтесь к моему Телеграм чату