2010-08-01 7 views
0

unset()을 사용한 후에 배열 순서를 잃는 데 약간의 문제가 있습니다. 여기서 먼저 코드이다 :PHP unset + undefined 오프셋

$id = $_GET['id']; 
for($i = 0; $i < count($my_array); $i++) 
{ 
    if($my_array[$i] == $id) 
    { 
     unset($my_array[$i]); 
    } 
} 

은 $ my_array 배열의 4 개 항목 $ my_array 배열 [1] $ ID와 동일한 가정을 갖는다. 내가 $ my_array에 foreach()를 실행하려고하면 unset Offset : 1 오류가 발생합니다. print_r ($ my_array)을 실행할 때 $ my_array [0], $ my_array [2] 및 $ my_array [3]을 얻습니다.

나는 왜 그런 일이 벌어지고 있는지, 제 질문은, 항목 2에 '항목 1'을 남기고 배열의 나머지 부분에 나머지 항목을 남기도록 배열을 다시 색인하는 방법이 있는지를 완전히 이해합니다. ?

reindex ($ my_array)와 같은 것이 멋질 것입니다. 나는 새로운 배열을 가진 루프를 위해 또 다른 루프를 실행할 수 있고 그것들을 수동으로 전송할 수 있다는 것을 알고있다. 그러나 한 단계의 해결책은 굉장 할 것이다. 나는 아무 것도 찾을 수 없었다.

답변

2

array_values을 호출하여 배열을 다시 색인화하십시오.

+0

너는 락. 나는 이미 그것을 시도했지만. 우리는 단지 오전 2시 이후에이 것을 비난 할 것입니다.) 감사합니다. –

+0

@Adam 글쎄, 지난 7 시부 터 다음과 같습니다 : p 나는 잠을 자러 갈 것입니다. – Artefacto

+0

@Adam 그런데'unset '후에 foreach를 사용하여 now-one-element-short 배열을 반복 할 수 있습니다. for 루프로 반복하기 때문에 다시 인덱스하는 경우 불필요합니다. 그냥'foreach' 또는'reset'과'next'를 사용하십시오. – Artefacto

0

난 그냥 당신은 또한 재 인덱싱 올바른 위치를 수행하는

array_splice($ar, 0, 0); 

을 할 수 발견, 그래서 당신은 원래 배열의 복사본으로 끝낼하지 않습니다.