2013-03-18 40 views
28

我一個以下關聯陣列命名$data如何更新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 
     ) 

) 

,我想的鍵[transaction_date]值轉換爲用戶可讀格式(即毫米/日/年)。爲此,我在返回整個數組的函數寫下面的代碼:

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

    return $data; 

我的問題是我得到了相同的陣列,而不改變[transaction_date]價值爲所有的數組元素。預計將返回[transaction_date]陣列的更新值。 任何人都可以幫我解決這個問題嗎?提前致謝。

+5

你必須使用你的左右鍵名稱報價! – 2013-03-18 07:59:26

+0

從JavaScript編輯,這似乎是一個硬過程適應到PHP爲簡單的任務 – Mani 2016-06-17 14:28:32

回答

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 2013-03-18 08:15:46

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

這不工作,因爲你沒有使用'作爲&$ value'!詳情請見我的回答! – naomik 2013-05-05 08:29:18

24

這將工作呢!

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

Yay for alternatives!

+3

這是正確的答案..你需要一個& - 其他方式(接受)是那種微妙的「黑客」 - 即通過'接受@Rikesh工作answer''indirectly'對於不是很明顯,即原因很多它可能看起來像a)的作品,但實際上b)正在發生,當你需要c)一直...... @ naomik的答案是正確的「c)」,而「a)」將起作用,它不是去 – 2015-10-22 11:15:30

+2

您的工作和拯救了我的生活...謝謝 – 2016-02-08 15:15:10

+1

謝謝..它的作品@naomik – 2016-09-22 07:48:07

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); 
    } 
}); 
相關問題