Что делает PHP со строками к числам при использовании в качестве ключей массива? - PullRequest
1 голос
/ 22 декабря 2009

Я пытаюсь создать ассоциативный массив, подобный этому:

$key = '0'
$arr = array((string)$key=>$value);

Позже, проверка is_string(array_keys($arr)[0]) возвращает false.

Приведение не помогло, использование «вместо» не помогло.

Я делаю что-то не так, или есть другой способ обойти это, или невозможно иметь ключ массива числовых строк?

Ответы [ 4 ]

4 голосов
/ 22 декабря 2009

В PHP строки преобразуются в числа при использовании в качестве индекса, если они чисто числовые. При назначении его в качестве ключа массива он преобразуется в целое число, и при доступе вы можете использовать $ arr ['0'] для доступа к ключу 0.

2 голосов
/ 22 декабря 2009

PHP обрабатывает индексы массивов немного более особым образом, чем просто присвоение переменных. Правила четко написаны в руководстве. Вот выдержка по вашему вопросу.

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

Цитата из http://php.net/manual/en/language.types.array.php

1 голос
/ 22 декабря 2009

Установить как целое число, но доступно как строка ...

Похоже, что ключам присваивается тип "целое число", если что-то в их значении не препятствует назначению. Вы можете получить к ним доступ в виде строк, как я продемонстрировал с помощью строки gettype().

$array = array("0" => "Jonathan", "1" => "Sampson");
$keys  = array_keys($array);
print gettype((string)$keys[0]); // string
0 голосов
/ 22 декабря 2009

при присвоении значений переменной, которые могут быть интерпретированы как несколько разных типов, НИКОГДА не полагаются на то, что они на самом деле являются определенным типом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...