2013-03-18 2 views
28

는 I는 다음의 연상 배열PHP의 연관 배열에서 특정 키의 값을 업데이트하는 방법은 무엇입니까?

Array 
(
    [0] => Array 
     (
      [transaction_user_id] => 359691e27b23f8ef3f8e1c50315cd506 
      [transaction_no] => 19500912050218 
      [transaction_total_amount] => 589.00 
      [transaction_date] => 1335932419 
      [transaction_status] => cancelled 
     ) 

    [1] => Array 
     (
      [transaction_user_id] => 9def02e6337b888d6dbe5617a172c18d 
      [transaction_no] => 36010512050819 
      [transaction_total_amount] => 79.00 
      [transaction_date] => 1336476696 
      [transaction_status] => cancelled 
     ) 

    [2] => Array 
     (
      [transaction_user_id] => 9def02e6337b888d6dbe5617a172c18d 
      [transaction_no] => 19020512050820 
      [transaction_total_amount] => 299.00 
      [transaction_date] => 1336476739 
      [transaction_status] => cancelled 
     ) 

    [3] => Array 
     (
      [transaction_user_id] => 9def02e6337b888d6dbe5617a172c18d 
      [transaction_no] => 27050512050821 
      [transaction_total_amount] => 79.00 
      [transaction_date] => 1336476927 
      [transaction_status] => cancelled 
     ) 

    [4] => Array 
     (
      [transaction_user_id] => 8e9050a3646c98342b9ba079fba80982 
      [transaction_no] => 12070512050822 
      [transaction_total_amount] => 129.00 
      [transaction_date] => 1336477032 
      [transaction_status] => cancelled 
     ) 

) 

$data 이름 및 사용자 I 읽을 수있는 형식 (즉, MM/DD/YYYY)로 [transaction_date] 키의 값을 변환 할 것. 전체 배열을 반환하는 함수에 다음 코드를 작성하는 I의 경우 :

foreach($data as $value) 
     { 
      $value[transaction_date]=date('d/m/Y',$value[transaction_date]); 
     } 

    return $data; 

내 문제는 내가 모든 배열 요소에 대한 [transaction_date]의 값을 변경하지 않고 동일한 배열을 얻고있다. 실제로 [transaction_date]에 대한 업데이트 된 값이있는 배열이 반환 될 것으로 예상됩니다. 누구든지이 문제를 해결하기 위해 나를 도울 수 있습니까? 미리 감사드립니다.

+5

키 이름을 따옴표로 묶어야합니다. –

+0

javascript에서 오는, 이것은 단순한 작업을 위해 PHP에 적응하기위한 어려운 절차처럼 보입니다. – Mani

답변

57

foreach를 이와 같이 변경하십시오. 작업을 수행 한 후 반환 변수 $data에 데이터를 다시 할당하지 않습니다.

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

Codepad DEMO.

+4

범위 내에서 foreach 변수 배열을 업데이트해도 값은 변경되지 않습니다. http://stackoverflow.com/questions/5810168/php-foreach-by-reference-causes-weird-glitch-when-going-through-array-of-objects – emaillenin

0
foreach($data as $value) 
{ 
    $value["transaction_date"] = date('d/m/Y',$value["transaction_date"]); 
} 
return $data; 
+5

이것은' & $ value'로! 자세한 내용은 내 대답을 참조하십시오! – naomik

24

이 너무 작동합니다!

foreach($data as &$value) { 
    $value['transaction_date'] = date('d/m/Y', $value['transaction_date']); 
} 

대체품을 찾으십시오!

+3

이것은 정답입니다. &이 필요합니다. 다른 방법은 허용되는 미묘한 "해킹"입니다. 즉, @Rikesh의 '허용 대답'은 명확하지 않은 이유로 간접적으로 작동합니다. 많은 사람들이 작품처럼 보이지만 실제로는 b) 일어나고 있습니다. c) 필요할 때마다 ... @ naomik의 대답은 올바른 것입니다. "c)"와 "a)"는 작동하지 않습니다. 가서 –

+2

너의 일하고 내 인생을 구 했어 ... 고마워. –

+1

고마워. –

11

PHP array_walk() 기능은 특별히 어레이를 변경하기위한 것입니다. 멀티 교단 배열

array_walk ($data, function (&$key) { $key["transaction_date"] = date('d/m/Y',$key["transaction_date"]); }); 
1

사용 array_walk_recursive 기능 :

이보십시오.

array_walk_recursive($data, function (&$v, $k) { 
    if($k == 'transaction_date'){ 
     $v = date('d/m/Y',$v); 
    } 
}); 
관련 문제