За последние 24 часа нас посетил 51451 программист и 6493 робота. Сейчас ищут 1960 программистов ...

Не работает второй foreach

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

  1. lVlist

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

    С нами с:
    12 фев 2017
    Сообщения:
    20
    Симпатии:
    5
    Ребят помогите! Не могу понять почему не срабатывает второй foreach, весь гугл перерыл)
    PHP:
    1. <?php
    2. $host = '127.0.0.1';
    3.     $db   = 'cmr';
    4.     $user = 'root';
    5.     $pass = '';
    6.     $charset = 'utf8';
    7.  
    8.     $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    9.     $opt = [
    10.         PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    11.         PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    12.         PDO::ATTR_EMULATE_PREPARES   => false,
    13.     ];
    14.     $pdo = new PDO($dsn, $user, $pass);
    15.    
    16. $stmt = $pdo->query('SELECT * FROM calendar');
    17.  
    18. /*Определяем время*/
    19. $dt = date("Y-m-d");
    20. $date = date( "d.m");
    21. $tomorrow = date( "d.m", strtotime( "$dt +1 day" ) );
    22.  
    23. echo 'Сегодня:<br>';
    24. foreach ($stmt as $value){
    25.     if($value['date'] == $date){
    26.         echo $value['date'].' '.$value['event'].'<br>';
    27.     }
    28. }
    29.  
    30. echo 'Завтра:<br>';
    31. foreach ($stmt as $value){
    32.     if($value['date'] == $tommorow){
    33.         echo $value['date'].' '.$value['event'].'<br>';      
    34.     }
    35. }
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    условие не срабатывает
     
    runcore нравится это.
  3. lVlist

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

    С нами с:
    12 фев 2017
    Сообщения:
    20
    Симпатии:
    5
    если даже я 1 условие продублирую, то 2 раз оно уже не работает
    тут дело не в опечатке)
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Даже не знаю кому поверить. Тебе или роботам. Точно ничего не скрываешь?
     
  5. lVlist

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

    С нами с:
    12 фев 2017
    Сообщения:
    20
    Симпатии:
    5
    если второй раз продублировать блок "Сегодня" который отрабатывает без проблем то второй раз он уже не срабатывает.
    Код (Text):
    1. echo 'Сегодня:<br>';
    2. foreach ($stmt as $value){
    3.     if($value['date'] == $date){
    4.         echo $value['date'].' '.$value['event'].'<br>';
    5.     }
    6. }
    7.  
    8. echo 'Сегодня:<br>';
    9. foreach ($stmt as $value){
    10.     if($value['date'] == $date){
    11.         echo $value['date'].' '.$value['event'].'<br>';
    12.     }
    13. }
     
  6. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Может ты просто Нео? Ну пиши тогда так.
    PHP:
    1. $a1 = ''; $a2 = '';
    2. foreach ($stmt as $value){
    3.     if($value['date'] == $date){
    4.         $a1 .= $value['date'].' '.$value['event'].'<br>';
    5.     }
    6.     if($value['date'] == $toMMMMorow){
    7.         $a2 .= $value['date'].' '.$value['event'].'<br>';
    8.     }
    9. }
    10. echo 'Сегодня:<br>'.$a1.'Завтра:<br>'.$a2;
     
    lVlist нравится это.
  7. lVlist

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

    С нами с:
    12 фев 2017
    Сообщения:
    20
    Симпатии:
    5
    Спасибо! Так работает)
    --- Добавлено ---
    А почему не срабатывал foreach второй раз, уже просто интересно.
     
  8. username

    username Новичок

    С нами с:
    6 июл 2017
    Сообщения:
    223
    Симпатии:
    17
    потому что две буквы m в слове завтра
     
  9. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @lVlist, однако, потому, что $stmt - вовсе не массив, а объект класса PDOStatement
    А в цикле foreach выполняется всё тот-же fetch
    И если для mysqli, например, есть data_seek, то для PDO придётся использовать метод fetchAll, возвращающий массив, который можно вдоль и поперёк обходить сколько угодно раз.
     
    lVlist нравится это.