Convertir valores enteros de columna en expresiones de fecha

4 minutos de lectura

Avatar de usuario de PHPLover
PHPLover

Tengo una siguiente matriz asociativa llamada $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
        )

)

y quiero convertir el valor de la clave [transaction_date] en un formato legible por el usuario (es decir, mm/dd/aaaa). Para eso escribí el siguiente código en una función que devuelve todo el arreglo:

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

Mi problema es que obtengo la misma matriz sin cambiar el valor de [transaction_date] para todos los elementos de la matriz. En realidad matriz con valores actualizados para [transaction_date] se espera que sea devuelto.

¿Cómo se puede resolver este problema?

  • ¡Tienes que usar comillas alrededor de tus nombres clave!

    – Jan Hančič

    18 de marzo de 2013 a las 7:59

  • Viniendo de javascript, parece un procedimiento difícil de adaptar a php para tareas simples

    – Mani

    17 de junio de 2016 a las 14:28

Avatar de usuario de Rikesh
Rikesh

Cambie su foreach a algo como esto, no está asignando datos a su variable de retorno $data después de realizar la operación en eso.

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

DEMO de teclado.

  • Actualizar la matriz de variables foreach dentro de su alcance no alterará su valor. stackoverflow.com/questions/5810168/…

    – Raj

    18 de marzo de 2013 a las 8:15

¡Esto también funcionará!

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

¡Hurra por las alternativas!

  • esta es la respuesta correcta… necesitas un & – la otra forma (aceptada) es una especie de “truco” sutil – es decir, el accepted answer por @Rikesh trabaja indirectly por razones que no son obvias, es decir, para muchos podría parecer que a) funciona, pero en realidad b) está sucediendo, cuando necesitabas c) todo el tiempo. La respuesta de @naomik es la correcta “c)” y mientras que “a) “funcionará, no es el camino a seguir

    – Señor Heelis

    22 oct 2015 a las 11:15


Avatar de usuario de SJ00
SJ00

PHP array_walk() La función es específicamente para alterar la matriz.

Prueba esto:

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

  • ¡Gracias! Usé esto en mi propio caso, para cambiar un cierto valor en una matriz asociativa, modificándolo ligeramente: array_walk ($ usuarios, función ($ & $ clave) { if ($ clave[‘name’] == ‘Juan’) $clave[‘name’] = ‘Jota’; }); En otras palabras, en la matriz de usuarios, cambie el nombre de usuario a Jack, si es John.

    – yenren

    26 de abril de 2019 a las 6:30


Avatar de usuario de Naveenkumar N
naveenkumar n

Use la función array_walk_recursive para una matriz multiconfesional.

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

El mejor enfoque es usar una lambda dentro de la función nativa “array_walk” para realizar los cambios necesarios:

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

El valor se actualiza en la matriz a medida que se pasa como referencia “&”.

Avatar de usuario de Ivan Fretes
Iván Fretes

Esta es una solución única, en donde tu_campo es un campo que establecerá y nuevo valor es un nuevo campo de valor, que puede ser una función o un valor único

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

En tu caso nuevo valor será una función de fecha ()

Avatar de usuario de CoBolt
CoBolt

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

  • Esto no funciona porque no usaste as &$value! ¡Vea mi respuesta para más detalles!

    – Mulán

    5 de mayo de 2013 a las 8:29

  • Esto no funciona porque no configuraste el elemento en la matriz, con el nuevo valor

    – Iván Fretes

    17 de junio de 2019 a las 19:42

¿Ha sido útil esta solución?