Una cadena numérica como clave de matriz en PHP
¿Es posible utilizar una cadena numérica como "123"
clave en una matriz PHP, sin que se convierta en un número entero?
$blah = array('123' => 1);
var_dump($blah);
huellas dactilares
array(1) {
[123]=>
int(1)
}
Quiero
array(1) {
["123"]=>
int(1)
}
No; no, no es:
Del manual :
Una clave puede ser un número entero o una cadena. Si una clave es la representación estándar de un número entero, se interpretará como tal (es decir, "8" se interpretará como 8, mientras que "08" se interpretará como "08").
Apéndice
Debido a los comentarios a continuación, pensé que sería divertido señalar que el comportamiento es similar pero no idéntico a las claves de objetos de JavaScript.
foo = { '10' : 'bar' };
foo['10']; // "bar"
foo[10]; // "bar"
foo[012]; // "bar"
foo['012']; // undefined!
Sí, es posible mediante la conversión de un stdClass
objeto en una matriz:
$data = new stdClass;
$data->{"12"} = 37;
$data = (array) $data;
var_dump( $data );
Eso te da (hasta la versión PHP 7.1):
array(1) {
["12"]=>
int(37)
}
(Actualización: mi respuesta original mostraba una forma más complicada de usar json_decode()
y json_encode()
que no es necesaria).
Tenga en cuenta el comentario : lamentablemente no es posible hacer referencia al valor directamente: $data['12']
generará un aviso.
Actualización :
desde PHP 7.2 en adelante, también es posible usar una cadena numérica como clave para hacer referencia al valor:
var_dump( $data['12'] ); // int 32
Mi solución es:
$id = 55;
$array = array(
" $id" => $value
);
El carácter espacial (anteponer) es una buena solución porque mantiene la conversión int:
foreach( $array as $key => $value ) {
echo $key;
}
Verás 55 como int.
Si necesita utilizar una clave numérica en una estructura de datos php, un objeto funcionará. Y los objetos conservan el orden, por lo que puedes iterar.
$obj = new stdClass();
$key = '3';
$obj->$key = 'abc';