Stef
En una matriz como la siguiente, ¿cómo podría cambiar el nombre de “fee_id” a “id”?
Matriz de entrada:
[
['fee_id' => 15, 'fee_amount' => 308.5, 'year' => 2009],
['fee_id' => 14, 'fee_amount' => 308.5, 'year' => 2009],
]
Resultado Esperado:
[
['id' => 15, 'fee_amount' => 308.5, 'year' => 2009],
['id' => 14, 'fee_amount' => 308.5, 'year' => 2009],
]
foreach ( $array as $k=>$v )
{
$array[$k] ['id'] = $array[$k] ['fee_id'];
unset($array[$k]['fee_id']);
}
Esto debería funcionar
-
Probablemente quieras hacerlo
foreach( array_keys($array) as $k)
oforeach($array as $k=>$v)
– gnarf
6 de febrero de 2010 a las 11:53
-
Esto cambiará el orden: la nueva clave estará al final
– Oleg
29 de octubre de 2014 a las 9:53
-
¿Por qué no usar
$v['fee_id']
en lugar de$array[$k] ['fee_id']
?– Y Feizi
15 de febrero de 2015 a las 8:21
-
Yfeizi, porque eso solo cambiará la variable temporal $v, y queremos cambiar la matriz original.
– pbarney
19 de junio de 2020 a las 21:28
Podrías usar array_map() para hacerlo.
$myarray = array_map(function($tag) {
return array(
'id' => $tag['fee_id'],
'fee_amount' => $tag['fee_amount'],
'year' => $tag['year']
); }, $myarray);
niels bom
$arrayNum = count($theArray);
for( $i = 0 ; $i < $arrayNum ; $i++ )
{
$fee_id_value = $theArray[$i]['fee_id'];
unset($theArray[$i]['fee_id']);
$theArray[$i]['id'] = $fee_id_value;
}
Esto debería funcionar.
-
¿Porque lo vuelve a contar cada vez?
– Niels Bom
6 de febrero de 2010 a las 11:56
-
Sí, suponiendo que tenga una gran matriz, esto lo contará cada vez y la página se cargará más lentamente / la carga del servidor aumentará
– llamas
6 de febrero de 2010 a las 11:59
¿Copiar el valor actual de ‘fee_id’ en una nueva clave llamada ‘id’ y anular la configuración de la clave anterior?
foreach ($array as $arr)
{
$arr['id'] = $arr['fee_id'];
unset($arr['fee_id']);
}
No hay una función incorporada que haga un afaik tan delgado.
Esta es la solución de trabajo, la probé.
foreach ($myArray as &$arr) {
$arr['id'] = $arr['fee_id'];
unset($arr['fee_id']);
}
-
Tenga en cuenta que usar variables de referencia en un bucle for como este podría ser una idea terrible. Ver stackoverflow.com/questions/3307409/…
– Pang
31 de agosto de 2016 a las 7:03
GabeSullice
El fragmento a continuación cambiará el nombre de una clave de matriz asociativa mientras conserva el orden (a veces… debemos hacerlo). Puede sustituir el valor de $ de la nueva clave si necesita reemplazar un elemento por completo.
$old_key = "key_to_replace";
$new_key = "my_new_key";
$intermediate_array = array();
while (list($key, $value) = each($original_array)) {
if ($key == $old_key) {
$intermediate_array[$new_key] = $value;
}
else {
$intermediate_array[$key] = $value;
}
}
$original_array = $intermediate_array;
-
Tenga en cuenta que usar variables de referencia en un bucle for como este podría ser una idea terrible. Ver stackoverflow.com/questions/3307409/…
– Pang
31 de agosto de 2016 a las 7:03
Convertido 0->campo0, 1->campo1,2->campo2….
Este es solo un ejemplo en el que obtengo un valor separado por comas en una cadena y lo convierto en una matriz multidimensional y luego, usando el ciclo foreach, cambié el valor clave de la matriz
<?php
$str = "abc,def,ghi,jkl,mno,pqr,stu
abc,def,ghi,jkl,mno,pqr,stu
abc,def,ghi,jkl,mno,pqr,stu
abc,def,ghi,jkl,mno,pqr,stu;
echo '<pre>';
$arr1 = explode("\n", $str); // this will create multidimensional array from upper string
//print_r($arr1);
foreach ($arr1 as $key => $value) {
$arr2[] = explode(",", $value);
foreach ($arr2 as $key1 => $value1) {
$i =0;
foreach ($value1 as $key2 => $value2) {
$key3 = 'field'.$i;
$i++;
$value1[$key3] = $value2;
unset($value1[$key2]);
}
}
$arr3[] = $value1;
}
print_r($arr3);
?>
¿Estos datos provienen de una base de datos? ¿Podrías cambiar la consulta?
SELECT fee_id as id, fee_amount as amount, year FROM .....
?– gnarf
6 de febrero de 2010 a las 11:56
sí, pero esta matriz y la consulta que genera se usan en toda la aplicación y es más fácil simplemente cambiar la salida en un solo lugar.
– Stef
6 de febrero de 2010 a las 13:28