Неопределенная ошибка смещения в Yii - PullRequest
0 голосов
/ 16 января 2012

У меня ошибка «Неопределенное смещение» в структуре Yii, мне нужно перейти к первому идентификатору, если следующий идентификатор равен нулю, и если последний идентификатор, если предыдущий идентификатор равен нулю?

public static function getNextOrPrevId($currentId, $nextOrPrev)
{
    $records=NULL;
    if($nextOrPrev == "prev")
       $order="id DESC";
    if($nextOrPrev == "next")
       $order="id ASC";

    $records=Photo::model()->findAll(
       array('select'=>'id', 'order'=>$order)
       );

    foreach($records as $i=>$r)
       if($r->id == $currentId)
          return $records[$i+1]->id ? $records[$i+1]->id : NULL;
    return NULL;
}

строка ошибки

return $records[$i+1]->id ? $records[$i+1]->id : NULL;

Ответы [ 2 ]

1 голос
/ 16 января 2012
return isset($records[$i+1]) ? $records[$i+1]->id : NULL;

Но на самом деле, вы должны напрямую выбрать следующий идентификатор из базы данных , а не выбирать все идентификаторы и проходить через них один за другим в PHP.

$record = Photo::model()->findAll(array(
    'select' => 'id',
    'order'  => $order,
    'where'  => "id > $currentId",
    'limit'  => 1
));

(Я не знаю Yii, так что я просто создаю синтаксис. Вы понимаете, хотя.)

0 голосов
/ 26 сентября 2012

Помните, что массивы PHP основаны на нуле ... когда вы достигаете последнего элемента в нем, вы пытаетесь получить значение из $ records [$ i + 1] -> id, где $ i может быть индексомПоследний элемент, но с добавлением «плюс один» не существует!

старайтесь избегать использования foreach и используйте простую форму FOR ..

// Not like this
foreach($records as $i=>$r)
    if($r->id == $currentId)
        return $records[$i+1]->id ? $records[$i+1]->id : NULL;

// I recommend
for($i=0; $i<sizeof($records); $i++){
    if(isset($records[$i]) && $records[$i]->id == $currentId)
        return $records[$i]->id;
}

плохой английский, но я надеюсь, что объяснил.

Привет от Mx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...