За последние 24 часа нас посетили 17883 программиста и 1566 роботов. Сейчас ищет 1241 программист ...

массивы не получается отобразить правильно

Тема в разделе "Laravel", создана пользователем Qvei, 7 окт 2020.

  1. Qvei

    Qvei Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    60
    Симпатии:
    4
    перепробовал кучу всего но в лучшем случае выводит только одну дату)
    Я знаю что не так делаю, но что именно нетак?
    есть запрос к БД в контроллере:
    Код (Text):
    1. $pathuser = DB::table('tracker_sessions')
    2.                     ->join('tracker_log','tracker_sessions.id','=','tracker_log.session_id')
    3.                     ->join('tracker_paths','tracker_log.path_id','=','tracker_paths.id')
    4.                     ->select('tracker_sessions.client_ip','tracker_paths.path','tracker_sessions.created_at')
    5.                     ->where('tracker_sessions.is_robot',0)
    6.                     ->where('tracker_sessions.created_at','>=',Carbon::now()->subHour(1))
    7.                     ->get();
    echo $pathuser дает такой результат:
    Код (Text):
    1. [{"client_ip":"136.143.127.164","path":"\/","created_at":"2020-10-07 13:06:18"},{"client_ip":"136.143.127.164","path":"statistica","created_at":"2020-10-07 13:06:18"},{"client_ip":"136.143.127.164","path":"statistica","created_at":"2020-10-07 13:06:18"},{"client_ip":"136.143.127.164","path":"statistica","created_at":"2020-10-07 13:06:18"},{"client_ip":"136.143.127.164","path":"statistica","created_at":"2020-10-07 13:06:18"},{"client_ip":"136.143.127.164","path":"statistica","created_at":"2020-10-07 13:06:18"}]
    пробовал примерно так:
    Код (Text):
    1. for($i=0;$i<=5;$i++) {
    2.  
    3. foreach ($pathuser[$i]  as  $key -> $value) {
    4.         $pathuser =  $value;
    5.     }
    6. }
    Но выдает только значение времени: 2020-10-07 13:06:18 значение последнего ключа в первой колекции.
    как правильно показать только значения всех ключей каждой колекции внутри этого... списка??
    типа 136.143.127.164 statistica 2020-10-07 13:06:18
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.793
    Симпатии:
    1.330
    Адрес:
    Лень
    преобразуй json в массив
    проходи двумя foreach
     
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    А с какого перепугу там JSON появился вообще? Должен был быть объект Collection. с объектами (а не массивами) внутри. Второй пример php кода - какой-то непонятный бред
     
  4. acho

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

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    предположу, что магия __toString
     
    mkramer нравится это.
  5. Qvei

    Qvei Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    60
    Симпатии:
    4
    Хоть я и далек.. но вот что имею на данный момент:

    если сделать gettype ($pathuser); то выдает Object.

    Истину..., что я только не делал... И через for и через foreach и двумя и даже четырьмя for-foreach... Мутаторы и комутаторы... Арреи и т.д.. В такие дебри уже залез голова квадратная...
    Циклы работают (что странно:)) но не дают того что надо..
    Ну объясните, ну почему вот так
    Код (Text):
    1. $pathusera = DB::table('tracker_sessions')
    2.                     ->join('tracker_log','tracker_sessions.id','=','tracker_log.session_id')
    3.                     ->join('tracker_paths','tracker_log.path_id','=','tracker_paths.id')
    4.                     ->select('tracker_sessions.client_ip','tracker_paths.path','tracker_sessions.created_at')
    5.                     ->where('tracker_sessions.is_robot',0)
    6.                     ->where('tracker_sessions.created_at','>=',Carbon::now()->subHour(1))
    7.                     ->get();
    8.                     $pathuserr = json_decode($pathusera);
    9.  
    10.                  
    11.                     foreach($pathuserr as $key => $pat) {
    12.                         foreach ($pat as $pat) {
    13.                           echo var_dump($pat);
    14.                     }
    15.                 }
    Результат получается таким
    Код (Text):
    1. string(13) "46.211.34.241" string(10) "statistica" string(19) "2020-10-08 13:13:01" string(13) "46.211.34.241" string(1) "/" string(19) "2020-10-08 13:13:01"
    А если не вардамплю а пытаюсь вывести как переменную
    Код (Text):
    1. $pathusera = DB::table('tracker_sessions')
    2.                     ->join('tracker_log','tracker_sessions.id','=','tracker_log.session_id')
    3.                     ->join('tracker_paths','tracker_log.path_id','=','tracker_paths.id')
    4.                     ->select('tracker_sessions.client_ip','tracker_paths.path','tracker_sessions.created_at')
    5.                     ->where('tracker_sessions.is_robot',0)
    6.                     ->where('tracker_sessions.created_at','>=',Carbon::now()->subHour(1))
    7.                     ->get();
    8.                     $pathuserr = json_decode($pathusera);
    9.  
    10.                  
    11.                     foreach($pathuserr as $key => $pat) {
    12.                         foreach ($pat as $pattt) {
    13.                           $pathuser = $pattt;
    14.                     }
    15.                 }
    То результат всегда такой:
    Код (Text):
    1. 2020-10-08 13:13:01
    почему оно хотябы как вардампит не выводит в переменной?
     
    #5 Qvei, 8 окт 2020
    Последнее редактирование: 8 окт 2020
  6. acho

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

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Не надо тебе ничего декодировать, включай голову.
    У тебя уже объект. И работай с ним как с объектом. Один форыч по объекту и всё.
    И обращаться к данным в стиле объекта, а не массива.
    PHP:
    1. foreach ($pat as $pat)
    это вот вообще что такое?
    PHP:
    это вот вообще как?
    PHP:
    1. foreach ($pathuser[$i]  as  $key -> $value) {
    2.         $pathuser =  $value;
    здесь вообще что подразумевалось.

    Блин, ну совсем элементарные вещи я объяснять не буду. Прочитай сам свой код, что ты вообще делаешь.
     
  7. Qvei

    Qvei Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    60
    Симпатии:
    4
    Есть $pathuser = [{"client_ip":"155.182.123.115","created_at":"2020-10-09 10:41:51","path":"statistica"}, {"client_ip":"155.182.123.115","created_at":"2020-10-09 10:41:51","path":"novinis"}, {"client_ip":"155.182.123.115","created_at":"2020-10-09 10:41:51","path":"statistica"}]
    Блин, ну вот https://stackoverflow.com/questions/4731242/php-loop-through-json-array такой-же аутпут как у мення
    Один форыч это такой?
    Код (Text):
    1. foreach ($pathuser as $key => $value) {
    2.                      
    3.                             $output = $value->path;
    4.                         }
    5.                    
    Если я обращаюсь к каждому массиву в моем $pathuser? (их там count($pathuser) = 3) то почему output выдает только значения последнего масива? где еще 2? я же foreach делаю...
    $output = 155.182.123.115 statistica 2020-10-09 10:41:51; Где еще 2?
    Такая конструкция тут тоже не рабртает
    Код (Text):
    1. $pathuser = json_decode($pathusera);
    2.                     foreach ($pathuser as $key => $value) {
    3.                         foreach ($value as $key => $val) {
    4.                             $output = $val->path;
    5.                         }
    6.                     }
    Блин ну если вам это так легко то хотяб обьясните что не так а не отсылайте к примерам. я по примерам итерирую же
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Что ты на выходе получить пытаешься? Пока ты код какой-то с полным отсутствием логики приводишь, поэтому нифига не понятно. И json свой убери, там у тебя коллекция, по идее, объектов. Не надо ничего декодировать. А вообще, отложи ларавель, вернись к основам php
     
  9. acho

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

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Совсем ты не хочешь думать. И основ не знаешь. Последуй совету Миши: отложи ларку, изучи основы.

    PHP:
    1. $pathusers = DB::table('tracker_sessions')
    2.                     ->join('tracker_log','tracker_sessions.id','=','tracker_log.session_id')
    3.                     ->join('tracker_paths','tracker_log.path_id','=','tracker_paths.id')
    4.                     ->select('tracker_sessions.client_ip','tracker_paths.path','tracker_sessions.created_at')
    5.                     ->where('tracker_sessions.is_robot',0)
    6.                     ->where('tracker_sessions.created_at','>=',Carbon::now()->subHour(1))
    7.                     ->get();
    8.  
    9. foreach ($pathusers as $pathuser) {
    10.     foreach ($pathuser as $value) {
    11.         echo $value;
    12.     }
    13. }
     
  10. Qvei

    Qvei Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    60
    Симпатии:
    4
    Разобрался..
    Форычи изначально правильные были только сделать это надо было в вьюхе. вот код
    Код (Text):
    1. @foreach($pathusers as $index=>$key)
    2.                   <tr>
    3.                   <td>{{$key->created_at}}</td>
    4.                   <td>{{$key->client_ip}}</td>
    5.                   <td>{{$key->path}}</td>
    6.                   </tr>
    7.                    @endforeach
    в контроллере проитерировать и передать переменными во вьюху я так и не смог

    это первое что я делал, ну я ж статьи вывожу так-же и не только так.. и я не говопил что знаток пхп или лары..
    циклом из контроллера не выводится почему-то с вьюхи моментально
     
  11. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Логично. А ты это пытался сделать?