Konvertieren Sie ganzzahlige Spaltenwerte in Datumsausdrücke

Lesezeit: 4 Minuten

Benutzeravatar von PHPLover
PHPLover

Ich habe ein folgendes assoziatives Array namens $data

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
        )

)

und ich möchte den Wert des Schlüssels umwandeln [transaction_date] in ein vom Benutzer lesbares Format (dh mm/tt/jjjj). Dafür habe ich den folgenden Code in eine Funktion geschrieben, die das gesamte Array zurückgibt:

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

Mein Problem ist, dass ich das gleiche Array bekomme, ohne den Wert von zu ändern [transaction_date] für alle Array-Elemente. Eigentlich Array mit aktualisierten Werten für [transaction_date] wird voraussichtlich zurückgegeben.

Wie kann dieses Problem gelöst werden?

  • Sie müssen Ihre Schlüsselnamen in Anführungszeichen setzen!

    – Jan Hancic

    18. März 2013 um 7:59 Uhr

  • Von Javascript kommend, scheint dies eine schwierige Prozedur zu sein, die sich für einfache Aufgaben an PHP anpassen lässt

    – Mani

    17. Juni 2016 um 14:28 Uhr

Rikeshs Benutzeravatar
Rikesch

Ändern Sie Ihr foreach in etwas wie folgt: Sie weisen Ihrer Rückgabevariablen keine Daten zurück $data nach Durchführung einer Operation daran.

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

Codepad-DEMO.

  • Das Aktualisieren des foreach-Variablenarrays innerhalb seines Gültigkeitsbereichs ändert seinen Wert nicht. stackoverflow.com/questions/5810168/…

    – Raj

    18. März 2013 um 8:15 Uhr

Das wird auch funktionieren!

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

Yay für Alternativen!

  • Dies ist die richtige Antwort. Sie benötigen eine & – Der andere Weg (akzeptiert) ist eine Art subtiler “Hack” – dh der accepted answer von @Rikesh funktioniert indirectly Aus Gründen, die nicht offensichtlich sind, dh für viele mag es so aussehen, als ob a) funktioniert, aber tatsächlich b) passiert, wenn Sie c) die ganze Zeit gebraucht haben. @naomiks Antwort ist das richtige “c)” und während “a) “Wird funktionieren, das ist nicht der richtige Weg

    – Herr Heelis

    22. Oktober 2015 um 11:15 Uhr


Benutzeravatar von SJ00
SJ00

PHP array_walk() Die Funktion dient speziell zum Ändern von Arrays.

Versuche dies:

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

  • Vielen Dank! Ich habe dies in meinem eigenen Fall verwendet, um einen bestimmten Wert in einem assoziativen Array zu ändern, indem ich es leicht modifizierte: array_walk($users, function(&$key) { if ($key[‘name’] == ‘John’) $Taste[‘name’] = ‘Jack’; }); Mit anderen Worten, ändern Sie im Benutzer-Array den Benutzernamen in Jack, wenn es sich um John handelt.

    – Yen

    26. April 2019 um 6:30 Uhr


Benutzeravatar von Naveenkumar N
Naveenkumar N

Verwenden Sie die Funktion array_walk_recursive für ein Array mit mehreren Denominationen.

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

Der beste Ansatz ist die Verwendung eines Lambda innerhalb der nativen Funktion “array_walk”, um die erforderlichen Änderungen vorzunehmen:

    array_walk($data, function (&$value, $key) {
            if($key == 'transaction_date'){ 
                  $value = date('d/m/Y', $value); 
            }
    });

Der Wert wird im Array aktualisiert, wenn er als Referenz “&” übergeben wird.

Benutzeravatar von Ivan Fretes
Ivan Fretes

Dies ist eine einzige Lösung, in der dein Feld ist ein Feld, das and setzt neuer Wert ist ein neues Wertefeld, das eine Funktion oder ein einzelner Wert sein kann

foreach ($array as $key => $item) {
   $item["your_field"] = "new_value";
   $array[$key] = $item;
}

In Ihrem Fall neuer Wert wird eine date()-Funktion sein

Benutzeravatar von CoBolt
CoBolt

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

  • Dies funktioniert nicht, weil Sie es nicht verwendet haben as &$value! Siehe meine Antwort für Details!

    – Mulan

    5. Mai 2013 um 8:29 Uhr

  • Dies funktioniert nicht, weil Sie das Element im Array nicht mit dem neuen Wert festlegen

    – Ivan Fretes

    17. Juni 2019 um 19:42 Uhr

1440950cookie-checkKonvertieren Sie ganzzahlige Spaltenwerte in Datumsausdrücke

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy