2010-06-16 4 views

답변

30

참조를 해제하는 중입니다 (참조를 위반 함). 당신은 키에 따라 설정을 해제해야 할 것 :

foreach ($this->result['list'] as $key => &$row) { 
    if ($this_row_is_boring) { 
     unset($this->result['list'][$key]); 
    } 
} 
+5

배열의 초기화시 배열 색인을 지정하지 않았더라도 (자동 숫자 인덱스) 배열 색인은 보존됩니다. 즉, 숫자 배열 키를 순차적으로 재구성하지 않습니다. – amphetamachine

7
foreach ($this->result['list'] as $key => &$row) { 
    if ($this_row_is_boring) { 
     unset($this->result['list'][$key]); 
    } 
} 
unset($row); 

기억 : 당신이 참조와 foreach를 사용하는 경우에 다음 중 하나를 복사하지 않습니다 foreach 수 있도록, 당신은 역 참조 해제 사용해야합니다 그것의 꼭대기. More info

+1

음, 참조와 함께 foreach를 사용하는 경우 각 루프에서 foreach를 해제 할 필요가 없습니다. PHP가 자동으로 그렇게합니다. ** loop 후에 ** 역 참조를해야합니다. – ircmaxell

+0

사실입니다 ... 오타였습니다. – Cristian

4

위의 답변에 대한 설명.

unset($row) 다음에 변수 $row이 설정되지 않았습니다. 그렇다고해서 $row의 데이터가 제거 된 것은 아닙니다. 목록에는 $row을 가리키는 요소도 있습니다.

변수를 레이블로 생각하는 것이 도움이됩니다. 하나의 데이터에는 하나 이상의 레이블이있을 수 있으며 unset은 해당 레이블을 제거하지만 실제 데이터는 변경하지 않습니다. 모든 레이블이 제거되면 데이터가 자동으로 삭제됩니다.