2013-03-18 18 views
28

Mam następujący asocjacyjna nazwie $dataJak zaktualizować wartość określonego klucza w tablicy asocjacyjnej w 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 
     ) 

) 

i chcę przekonwertować wartość klucza [transaction_date] w formacie czytelnym dla użytkownika (tj dd/mm/rrrr). W tym napisałem następujący kod w funkcji, która zwraca całą tablicę:

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

    return $data; 

Moim problemem jest to dostaję tę samą tablicę bez zmiany wartości [transaction_date] dla wszystkich elementów tablicy. W rzeczywistości oczekuje się, że tablica z zaktualizowanymi wartościami dla [transaction_date] zostanie zwrócona. Czy ktoś może mi pomóc rozwiązać ten problem? Z góry dziękuję.

+5

Musisz używać cudzysłowów wokół swoich kluczowych nazw! –

+0

Pochodzące z javascript, wydaje się to trudną procedurą dostosowania się do php dla prostych zadań. – Mani

Odpowiedz

57

Zmień foreach na coś takiego, Nie przypisujesz danych do zmiennej powrotnej $data po wykonaniu operacji na tym.

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

Codepad DEMO.

+4

Aktualizacja tablicy foreach w jej zasięgu nie zmieni jej wartości. 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

To nie działa, ponieważ nie użyłeś ' as & $ value'! Zobacz moją odpowiedź po szczegóły! – naomik

24

to będzie działać zbyt!

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

Yay dla alternatywy!

+3

to jest poprawna odpowiedź .. potrzebujesz & - druga metoda (akceptowana) jest rodzajem subtelnego "hacka" - tj. "Akceptowana odpowiedź" @Rikesh działa "pośrednio" z powodów, które nie są oczywiste, tj. wiele może wyglądać jak a) działa, ale tak naprawdę b) dzieje się, kiedy potrzebujesz c) przez cały czas .. @ naomik odpowiedź jest właściwa "c)" i podczas gdy "a)" zadziała, to nie jest droga do idź –

+2

swoje i pracowałeś i uratowałeś moje życie ... Dziękuję –

+1

Dzięki .. Działa @naomik –

11

Funkcja PHP array_walk() służy specjalnie do zmiany tablicy.

Spróbuj:

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

Używaj array_walk_recursive funkcję multi-wyznaniowej tablicy.

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