Matrices asociativas PHP: cómo tratar el entero como una cadena

Tengo una matriz asociativa simple.

$a = array("a"=>"b", "c"=>"d");

Quiero comprobar si la clave "1" existe en la matriz, por ejemplo

isset($a["1"]);

Esta cadena se trata como un número entero, por lo que

echo $a["1"]; //prints "d"

¿Cómo consigo que lo trate como una cuerda?

No quiero usar array_key_exists o in_array porque mi evaluación comparativa muestra que isset será mucho más rápido.

preguntado el 09 de enero de 11 a las 04:01

.. la respuesta fácil es, no use números enteros de cadena para sus matrices asociadas. Agregue un prefijo o cambie completamente su convención de nomenclatura. ¿Por qué crear una solución alternativa para adaptarse a esta opción de diseño prevenible? -

Estoy analizando palabras de un texto y comprobando su índice, algunos de ellos serán números, así que tengo que hacerlo de esta manera. -

-1 pregunta falsa, php no se comporta de esta manera. -

@chris, ¿a qué te refieres? -

@Pacerier echo $a["1"]; no imprime "d". -

3 Respuestas

No parece que puedas hacer lo que quieres hacer. de http://us.php.net/manual/en/language.types.array.php:

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").

Probablemente tendrá que usar la sugerencia de Fosco de prefijar todas sus claves con algo. Si usa el mismo prefijo en cada tecla, entonces no importa si está analizando un texto que puede tener palabras y números; coloque el mismo prefijo en todo independientemente.

Respondido el 09 de enero de 11 a las 07:01

isset ($ a ["1"]) | isset ($ a [1])?

O simplemente está configurado ($ a [1])

O incluso isset ($ a [intval (1)]) para estar 1000% seguro.

Respondido el 09 de enero de 11 a las 07:01

Al revés, buscando cadena, no entero - bcoughlan

si echo $ a ['1'] imprime d, entonces su matriz tiene más elementos de los que cree.

vea las funciones var_dump ($ a) e print_r ($ a) para ayudarle a depurar su código.

Respondido el 09 de enero de 11 a las 07:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.