За последние 24 часа нас посетили 18637 программистов и 1604 робота. Сейчас ищут 1012 программистов ...

Выдача данных в один список

Тема в разделе "Прочие вопросы по PHP", создана пользователем Iorvet, 16 окт 2013.

  1. Iorvet

    Iorvet Новичок

    С нами с:
    16 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    Доброго времени суток, коллеги.

    Есть код:

    Код (Text):
    1.  
    2.  
    3. $data_d = file_get_contents('запрос к API первого сайта');
    4. $data_d = json_decode($data_d);
    5.  
    6. foreach ($data_d->shots as $shots) {
    7.     echo '<a target="_blank" href="' . $shots->url . '"><img src="' . $shots->image_teaser_url . '" /></a>';
    8. }
    9.  
    10. $data_b = file_get_contents('запрос к API второго сайта');
    11. $data_b = json_decode($data_b, true);
    12.  
    13. foreach ($data_b['projects'] as $projects) {
    14.     echo '<a target="_blank" href="' . $projects['url'] . '"><img src="' . $projects['covers']['202'] . '" /></a>';
    15. }
    16.  
    17.  
    Подскажите, пожалуйста, как сделать, чтоб был один вывод, а не два и плюс, чтоб было чередование?
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    придется копить данные в одном массиве, перемешивать его и потом выводить. перемешать можно в shuffle()
    тебе придетсядется решить к какому виду приводить данные - как в первом источнике или как во втором.

    только не проси написать за тебя весь код. делай сам, учись, расти.
     
  3. Iorvet

    Iorvet Новичок

    С нами с:
    16 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    Спасибо за подсказку.
    Но это хоть реально сделать? На словах это красиво.
     
  4. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    не совсем понял почему именно перемешивать - а почему не так
    http://php.ru/manual/function.array-merge.html
    $data_d и $data_b это ведь два массива .. слить их и выдать значение

    Добавлено спустя 3 минуты 3 секунды:
    а все помедленней прочитал задачу - ну да сначала мерге а потом шафл
     
  5. Iorvet

    Iorvet Новичок

    С нами с:
    16 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    Делал так, проверял работу функции:
    Код (Text):
    1. $data = array_merge($data_d, $data_b);
    2. print_r($data);
    Не выводит вообще ничего.

    Хотя по отдельности print_r($data_d) и print_r($data_b) выводит массив нормально.
    При этом нужно еще как-то привести вывод к общему виду, а то в первом массиве вид $shots->url, а во втором уже $projects['url']. В этом вся сложность.
     
  6. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    структуру массивов в студию чую они разные совсем ..
     
  7. Iorvet

    Iorvet Новичок

    С нами с:
    16 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    Массив первого API:

    stdClass Object ( [shots] => Array ( [0] => stdClass Object ( [id] => 1274635 [title] => Brushes for wireframing => [url=http://example.com]http://example.com [image_teaser_url] => http://example.com/teaser.png)))

    Массив второго API:

    Array ( [projects] => Array ( [0] => Array ( => [url=http://www.example.net/2]http://www.example.net/2 [covers] => Array ( [202] => http://example.com/teaser1.png [404] => http://example.com/teaser2.png ) ) ) )
     
  8. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    Пока просто переделал для наглядности - что понять как скрестить ужика с ежиком ( массивы то совсем разные)
    ====1=====
    Код (Text):
    1. stdClass Object ( [shots] =>
    2.                 Array ( [0] =>
    3.                        stdClass Object (
    4.                      [id] => 1274635
    5.                      [title] => Brushes for wireframing
    6.                      [url] => http://example.com
    7.                      [image_teaser_url] => http://example.com/teaser.png)))
    8. =====2======
    9. Array ( [projects] =>
    10.              Array ( [0] =>
    11.                     Array (
    12.                             [url] =>http://www.example.net/2
    13.                             [covers] => Array (
    14.                                        [202] => http://example.com/teaser1.png
    15.                                        [404] => http://example.com/teaser2.png ) ) ) )
     
  9. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    ( здесь было полное решение. сорвался, виноват! удаляю... )
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Например в цикл, и проверить is_object || is_array, все можно сделать 1 выводом, только с паттернами. В цикле проверять.
     
  11. Iorvet

    Iorvet Новичок

    С нами с:
    16 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    Хм, а было ли решение...

    Добавлено спустя 2 минуты 51 секунду:
    Подумал распихать результат по чётным элементам массива:

    Код (Text):
    1. $rgResult = array();
    2. $iKey = 0;
    3. foreach ($data_d->shots as $shots) {
    4.      $rgResult[ $iKey ] =  '<a target="_blank" href="' . $shots->url . '"><img src="' . $shots->image_teaser_url . '" /></a>';
    5.      $iKey += 2;
    6. }
    Но дальше не догадываюсь, что делать...

    Так же, посоветовали, что можно с помощью each выводить сразу из обоих массивов. Но будут сложности с логикой и представлением, а этого не нужно.
     
  12. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    похоже это надо много выпить чтобы придумать как состыкануть
    гдето на подсознательном уровне я понимаючто из всех данных с 1 и 2 массива используются только 2 поля
    url и картика
     
  13. Iorvet

    Iorvet Новичок

    С нами с:
    16 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    Да, понятие абсолютно правильно. Не было смысла писать всю выдачу, так как она ну очень большая.
    На JS люди как-то делали это. Следовательно и на PHP можно.
     
  14. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    блин начал править и сука не то сделал и сообщение не то изменил.
     
  15. Iorvet

    Iorvet Новичок

    С нами с:
    16 окт 2013
    Сообщения:
    10
    Симпатии:
    0
  16. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Тебе Your дал правильную подсказку про is_object(). Каменты этой темы дают тебе всё, что нужно. Только переводи на PHP.

    http://qb7.ru/B0C4DD3C/lorvet.php
     
  17. Iorvet

    Iorvet Новичок

    С нами с:
    16 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    Это, конечно, все хорошо. И спасибо большое за советы. :)

    Но в примере, что Вы дали, каждый раз разный порядок вывода. А требуется, чтоб было чередование: первая_работа_первого_сайта, первая_работа_второго_сайта, вторая_работа_первого_сайта, вторая_работа_второго_сайта... ну и т.д.
     
  18. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    минутку - мысль потихоньку рождается где то в заднем мозгу
    суть примерно такая - как вытащить из обоих json но так чтобы брались только нужные с\поля
     
  19. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    а! ну дык ёлы-палы. ты про shuffle читал? и промолчал.

    Добавлено спустя 1 минуту 12 секунд:
    тогда shuffle() меняем на свою "умную" сортировку )))

    http://qb7.ru/B0C4DD3C/shuffle.php - перемешиваются случайно
    http://qb7.ru/B0C4DD3C/periodic.php - один оттуда, другой отсюда и т.д.

    Добавлено спустя 29 минут 38 секунд:
    Еще одна подсказка:
    $i*2
    $i*2+1
     
  20. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    http://qb7.ru/B0C4DD3C/periodic.php че за фигня лезет ? какието картинки .. и вообше с этого сайта какая то муть
     
  21. Iorvet

    Iorvet Новичок

    С нами с:
    16 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    У меня показывает все как и должно быть.

    Спасибо за подсказки. Сейчас буду все это соединять вместе. :)
    Если у кого-то есть еще умные мысли, то пишите - лишними не будут.

    artoodetoo отдельное спасибо, за внушение уверенности, что все возможно сделать. ))
     
  22. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    сам посматри
    [​IMG]
     
  23. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Слава, что тебя так взволновало?

    Добавлено спустя 1 минуту 39 секунд:
    если что, картинки из фидов, я за них не отвечаю )))
     
  24. Iorvet

    Iorvet Новичок

    С нами с:
    16 окт 2013
    Сообщения:
    10
    Симпатии:
    0
    Да, картинки разных размеров, их еще кропить надо и оформлять html и css. Но это уже мелочи жизни. Главное сейчас сам вывод.
     
  25. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а тьфу ты ну ты - у меня седне в кабинете оч жарко - мозг плавится - никто не хочет открывать окошко.
    меня почемуто переклинило, что по ссылкам должен быть какойто хелп .. ну или текстовка .. а тут бах и картинки и никак не соображу что это ты просто у себя на хосте запустил скрипт :D