Yii上的未定义偏移量错误

时间:2012-01-16 12:11:55

标签: php yii

我在Yii框架中有“Undefined offset”错误,如果下一个id为null,我需要转到第一个id,如果前一个id为null,我需要转到最后一个id吗?

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 个答案:

答案 0 :(得分:1)

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

但实际上,您应该直接select the next id from the database,而不是选择所有ID并在PHP中逐个循环遍历它们。

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

(我不知道Yii,所以我只是简单地编写语法。但你得到了这个想法。)

答案 1 :(得分:-2)

请记住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的问候。