2013-03-18 68 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); 
    } 
}); 
相关问题