За последние 24 часа нас посетили 33028 программистов и 1757 роботов. Сейчас ищут 839 программистов ...

Возвращает не пустой массив

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

  1. Enjoy

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

    С нами с:
    10 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    Добрый день.

    Не кидайте в меня ссаными тряпками но я чет не могу победить траблу...

    Имею такой метод в контроллере

    PHP:
    1. public function actionOnline() {
    2.         $data[] = $this->model->getUserOnline();
    3.  
    4.         if(empty($data[0])) {
    5.             $data[] = "<div class='frame error'>А никого нет</div>";
    6.  
    7.             $this->view->render('Сейчас онлайн игроков', $data);
    8.             exit;
    9.         }else {
    10.             $this->view->render('Сейчас онлайн игроков', $data);
    11.         }
    12.     }
    Если онлайн нет пользователей, хочу выводить сообщение

    Если дампить $data в этом участке, то возвращает

    PHP:
    1. var_dump($data);die;
    2.  
    3. array(0) { }
    Эта переменная уходит в рендер, где отрисовывается View

    HTML:
    1. <div class="mainContents">
    2.     <ol class="l1">
    3.     <?php foreach ($data as $user): ;?>
    4.  
    5.             <li><a href="/user/info?id=<?=$user['id']?>"><?=$user['login']?>[<?=$user['blvl']?>]</a> </li>
    6.  
    7.     <?php endforeach; ?>
    8.     </ol>
    9.     <div class="clear">&nbsp;</div>
    10. </div>
    Если дампить ее до foreach, то я получаю

    Код (Text):
    1.  
    2. NULL
    3. [LIST=1]
    4.  
    5. Warning: Invalid argument supplied for foreach() in C:\OS\OSPanel\domains\dwmvc\app\views\user\online.php on line 4
    6. [/LIST]
    Почему NULL То, если я передал месагу?
     
  2. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    не знаю
     
  3. lastdays

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

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    exit; - не лишний? убери и переменная data будет содержать массив.
     
  4. Enjoy

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

    С нами с:
    10 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    Убрал, ничего не поменялось... все ровно так же
    --- Добавлено ---
    а render выглядит так


    PHP:
    1. public function render($title, $var = []) {
    2.         //Переделать в цикл
    3.         if(!empty($var[0])) $data = $var[0];
    4.         else $data = null;
    5.         if(!empty($var[1])) $data2 = $var[1];
    6.         else $data2 = null;
    7.         if(!empty($var[2])) $data3 = $var[2];
    8.         else $data3 = null;
    9.  
    10.         $url = substr($_SERVER['REQUEST_URI'],1);
    11.         $argArr = explode('/',$url);
    12.  
    13.         if(!empty($argArr[0])) $path = $argArr[0];
    14.         if(!empty($argArr[1])) $view = $argArr[1];
    15.         else $view = 'index';
    16.  
    17.         $findSymbol = strpos($view, '?');
    18.         if($findSymbol == true) {
    19.             $view = stristr($view, '?', true);
    20.         }
    21.  
    22.         $content = 'app/views/'.$path.'/'.$view.'.php';
    23.  
    24.         include 'app/views/'.$this->template.'.php';
    25.  
    26.     }
    --- Добавлено ---
    и тут я понял почему NULL

    буду думать....
    --- Добавлено ---
    Мысли в слух дают ответ.
    Всем спасибо!

    Вот решение

    PHP:
    1. public function actionOnline() {
    2.         $data[] = $this->model->getUserOnline();
    3.        
    4.         if(empty($data[0])) {
    5.             $data[0] = "<div class='frame error'>А никого нет</div>";
    6.  
    7.             $this->view->render('Сейчас онлайн игроков', $data);
    8.  
    9.         }else {
    10.             $this->view->render('Сейчас онлайн игроков', $data);
    11.         }
    12.     }
    Потому что мой тупой рендер смотрит не циклом а по очереди и дает NULL если 0 элемент пуст, а так как он уже был NULL то данные встали в 1 элемент, а его уже рендер игнорит... нубас че скажешь
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Что в дате лежит?
     
  6. lastdays

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

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    тут вообще ничего непонятно, что и где лежит.
    Я не понимаю, человеку советую убрать exit, говорит не помогло, а потом выкладываю код без него и говорит, что всё прошло и оки-доки.


    Бери функцию себе создай и кешируй данные, если это необходимо


    function online ( )
    {
    $q = "SELECT COUNT(1) FROM `users` WHERE `online`=1";
    return $q;
    }
     
    Enjoy нравится это.
  7. Enjoy

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

    С нами с:
    10 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    вернул exit все работает нормально, знаток )

    Главное трабла решилась ) и тебе спасибо