2011-01-09 11 views
7

Tengo una matriz asociativa simple.Arrays asociativos PHP: cómo tratar un entero como una cadena

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

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

isset($a["1"]); 

Esta cadena está siendo tratado como un entero, de modo que

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

¿Cómo llego a tratarla como una cadena?

No quiero usar array_key_exists o in_array porque mi benchmarking muestra isset será mucho más rápido.

+3

.. la respuesta fácil es, no use 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? – Fosco

+0

Estoy analizando palabras de un texto y comprobando su índice, algunas de ellas serán números, así que tengo que hacerlo de esta manera. – bcoughlan

+2

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

Respuesta

6

Parece que no puede hacer lo que quiere hacer. desde http://us.php.net/manual/en/language.types.array.php:

Una clave puede ser un entero o una cadena. Si una clave es la representación estándar de un entero, se interpretará como tal (es decir, "8" se interpretará como 8, mientras que "08" se interpretará como "08").

Probablemente tengas que usar la sugerencia de Fosco de poner a punto todas tus llaves con algo. Si usa el mismo prefijo en cada tecla, entonces no importa si está analizando un texto que podría tener palabras y números: ponga el mismo prefijo en todo independientemente.

0

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

O simplemente isset ($ a [1])

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

+0

Otra manera, buscando cadena, no entero – bcoughlan

0

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 ayudarlo a depurar su código.

Cuestiones relacionadas