PHP - приведение int ключ к строке? - PullRequest
2 голосов
/ 27 сентября 2011

У меня есть несколько больших функций PHP, написанных некоторое время назад. Они содержат несколько ассоциативных массивов. До сих пор у меня не было проблем с этими массивами, потому что они содержали ключи типа string и int (например, «brown» и 118). Проблема в том, что когда все ключи имеют тип int, они не сохраняются, а преобразуются в 0, 1 и т. Д.

Есть ли способ заставить массив сохранить ключи, которые я ему даю, даже если они все int? Функции довольно большие, и их изменение может занять слишком много времени.

EDIT

Как интуитивно понял Майк Б, я использую функцию сортировки, которая, кажется, переиндексирует массивы. Я использовал функцию, которую нашел здесь: Сортировать массив по ключам на основе другого массива?

Это был первый Эрин, но он не сохранил правильные индексы. Я попробовал версию, отредактированную Boombastic, и она хорошо работает.

Спасибо за все ваши ответы!

Ответы [ 2 ]

2 голосов
/ 21 августа 2016

У меня похожая проблема с $array = ['00'=>'x','11'=>'y'], который был преобразован в целочисленные ключи, потеряв цифру '0'.

Запись только для ответа через 5 лет после ...

Ответ KennyDs можно упростить,

$array = array_map('strval',$array);

... но, как прокомментировал MikeB, ответ KennyDs неправильный, правильный:

foreach($array as $key => $val)
  $array[(string) $key] = $val;

или в (некрасивом) функционалеstyle,

 $array = array_flip( array_map('strval', array_flip($array)) );

(без прямой проверки, как я проверял).


О проверке с помощью var_dump() или var_export(): показывать строку как число при разборе как число (например,. '123' как 123), но не потерянная строка (!), Пример array ( '00' => 'x', 11 => 'y',).

1 голос
/ 27 сентября 2011

Вы также можете просто просмотреть массив и привести все int к строке?

foreach($array as $key => $val){
  $array[$key] = (string)$val;
}

Редактировать: если вам нужно, чтобы ваши ключи были int, просто убедитесь, что при заполнении массива вы добавляете (int) приведение перед $ key.

...