我在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;
答案 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的问候。