2013-03-18 17 views
28

bir aşağıdaki ilişkisel diziPHP'de ilişkilendirilebilir bir dizide belirli anahtarın değeri nasıl güncellenir?

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 adlandırılır ve kullanıcı tarafından okunabilen bir biçime (aa/gg/yyyy) içine anahtar [transaction_date] değerini dönüştürme için ettik. Dizinin tamamını döndüren bir işlev aşağıdaki kodu yazılı olduğu I için:

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

    return $data; 

Sorunum tüm dizi elemanları [transaction_date] değerini değiştirmeden aynı diziyi alıyorum olduğunu. Aslında [transaction_date] için güncellenmiş değerler dizisi döndürülmesi bekleniyor. Bu sorunu çözmek için bana yardımcı olan var mı? Şimdiden teşekkürler.

+5

Anahtar adlarınız etrafında teklif kullanmak zorundasınız! –

+0

javascript gelen, bu basit görevler için php adapte zor bir prosedür gibi görünüyor – Mani

cevap

57
böyle bir şey için foreach değiştirme

, Bundan emin işlemi gerçekleştirdikten sonra geri dönüş değişken $data veri atama değildir.

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

Codepad DEMO.

+4

Onun içinde foreach değişken dizinin güncellenmesi onun değerini değiştirmeyecektir. 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

Kullanılmadığı için bu işe yaramıyor & $ değeri olarak! Detaylar için cevabımı görün! Başka bir yol (kabul) "kesmek" ince çeşit - - – naomik

24

Bu da çalışacak!

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

Alternatifler için Yay!

+3

bu .. Bir & doğru cevap ihtiyaç olduğu '@Rikesh tarafından answer' kabul etmek, yani belirgin değildir nedenlerle' indirectly' çalışır yani birçok gibi görünebilir a) çalışır, ama aslında b) oluyor, c) gerektiğinde c) tüm boyunca .. @ naomik'in cevabı doğru olan "c)" ve "a" iken işe yaramazsa –

+2

'a gidin & çalıştım ve hayatımı kurtardım ... Teşekkür ederim –

+1

Teşekkürler .. @naomik çalışır –

11

PHP array_walk() fonksiyon dizisi değiştirmek için özel olarak. Çok mezhepsel dizisi için

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

Kullanım array_walk_recursive işlevi:

bu deneyin.

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