PHP ассоциативные массивы - как трактовать целое число как строку - PullRequest
7 голосов
/ 09 января 2011

У меня есть простой ассоциативный массив.

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

Я хочу проверить, существует ли ключ "1" в массиве, например,

isset($a["1"]);

Эта строка обрабатывается как целое число, так что

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

Как мне заставить его обращаться со строкой?

Я не хочу использовать array_key_exists или in_array, потому что мои тесты показывают, что isset будет намного быстрее.

Ответы [ 3 ]

6 голосов
/ 09 января 2011

Не похоже, что вы можете делать то, что хотите. от http://us.php.net/manual/en/language.types.array.php:

Ключ может быть целым числом или строкой. Если ключ является стандартным представлением целого числа, он будет интерпретирован как таковой (то есть «8» будет интерпретироваться как 8, а «08» будет интерпретироваться как «08»).

Вам, вероятно, придется воспользоваться предложением Fosco о добавлении к ключам всех ваших ключей. Если вы используете один и тот же префикс для каждой клавиши, то не имеет значения, разбираете ли вы текст, который может содержать слова и цифры - независимо от того, поставьте один и тот же префикс на все.

0 голосов
/ 09 января 2011

если echo $ a ['1'] печатает d, то в вашем массиве больше элементов, чем вы думаете.

см. Функции var_dump ($ a) и print_r ($ a) для отладки кода.

0 голосов
/ 09 января 2011

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

Или просто isset ($ a [1])

Или даже isset ($ a [intval (1)]), чтобы быть уверенным на 1000%.

...