2012-01-16 5 views
0

Yii 프레임 워크에서 "정의되지 않은 오프셋"오류가 있습니다. 다음 ID가 null 인 경우 첫 번째 ID로 이동해야하며 이전 ID가 null 인 경우 마지막 ID가 필요합니까?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; 
+0

"이전 ID가 null 인 경우 마지막 ID는 무엇을 의미합니까?" ? –

답변

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

하지만 실제로는, 당신은 직접 select the next id from the database, 그들을 통해 PHP에서 하나 하나 모든 ID와 루프를 선택하지 않아야합니다.

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

(나는 YII을 모르는, 그래서 난 그냥 구문을 위로 만들고있어. 당신은 비록 아이디어를 얻을.) 당신이 도달하면

-2

... PHP 배열이 제로를 기반으로하는 기억 그것의 마지막 항목은 $ records [$ i + 1] - id에서 값을 얻으려고합니다. $ i는 아마도 마지막 항목의 색인이지만 'plus one'은 존재하지 않습니다!

내 나쁜 영어, 롤 .. 미안

// 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; 
} 

을 foreach 문을 사용하지 않도록하고, FOR의 간단한 양식을 사용하려고하지만 난 내가 설명 바랍니다.

Greetings from Mx.

+1

-1 - "foreach를 피하십시오."...이 제안을 뒷받침 할 권위있는 참조가 있습니까? 'foreach'는 "cleaner"문법입니다 (당신 만의 예제를보세요). 특히 연관 배열의 키가 순차적이지 않은 상황에서 받아 들여질 수 있습니다. 이 코드를 깨뜨린'foreach '의 사용이 아니라'$ i + 1'의 사용이었습니다. 이것은 고전적인'for' 루프의 최종 루프에서도 오류를 일으켰을 것입니다. – Sepster

관련 문제