2012-10-23 4 views
11

배열의 데이터에서 정리 작업을 실행하려고합니다. 특히 에포크 시간을 YYYY-MM-DD로 변환하는 것이 좋습니다. 배열의 데이터를 foreach 루프로 업데이트 할 수없는 이유는 무엇입니까?

나는 원래이 기능을 시도 :

foreach ($data as $row) { 
    $row['eventdate'] = date('Y-m-d', $row['eventdate']); 
} 

echo '<pre>'; 
print_r($data); 
echo '</pre>'; 

foreach는 루프가 때 출력 데이터를 업데이트하지 않았다 그러나.

for ($i=0; $i<count($data); $i++) { 
    $data[$i]['eventdate'] = date('Y-m-d', $data[$i]['eventdate']); 
} 

왜 첫 번째 루프가되지 않았고, 두 번째 작업 :

루프를 위해 한 다음 작업

? 그들은 같지 않아?

답변

29

하여 파괴하는 것이 좋습니다, $row은 "별 가치"가 아닌 "참조에 의한"을 사용하고있다.

foreach ($data as &$row) { 
    $row['eventdate'] = date('Y-m-d', $row['eventdate']); 

또는, 당신은 키/값 방법을 사용할 수 있습니다 : 때문에 foreach 문에

foreach ($data as $index => $row) { 
    $data[$index]['eventdate'] = date('Y-m-d', $row['eventdate']); 
+0

감사합니다! – Choy

+1

@Choy 첫 번째 경고 [here] (http://php.net/manual/en/control-structures.foreach.php)를보고 싶을 수도 있습니다. –

7

초기 예제는 참조가 아닌 값별로 행을 전달합니다. 워드 프로세서 위하여

가입일

직접 &와 루프 선행 $으로 값 내에 배열 요소를 수정할 수있다. 이 경우 값이 어느 패스 기준

foreach ($data as &$row) { 
    $row['eventdate'] = date('Y-m-d', $row['eventdate']); 
} 

사용하거나 더 명백한 구문 중요성 또한

foreach ($data as $key => $value) { 
    $data[$key]['eventdate'] = date('Y-m-d', $value['eventdate']); 
} 

의해 참조 따라서

할당 될는이 경고 인 문서

$ 값과 마지막 배열 요소는 foreach 루프 후에도 남아 있습니다. 그것은 당신이 현재 방식, foreach ($data as $row) {에서 foreach 루프를 사용하는 경우에는 해제()

관련 문제