Я сталкивался со старым приложением, которое использует идентификатор для именования массива типа, например ...
array(1) {
[280]=>
string(3) "abc"
}
Теперь Мне нужно изменить их порядок, и var_dump ()
создаст впечатление, что этого не произойдет, пока ключи целые.
Если я добавлю a
в каждый индекс, var_dump ()
будет показывать двойные кавычки вокруг ключа, я предполагаю, что теперь это строка ...
array(1) {
["280a"]=>
string(3) "abc"
}
Это позволило бы мне легко переупорядочить их, не трогая больше кода.
Это не работает .
$newArray = array();
foreach($array as $key => $value) {
$newArray[(string) $key] = $value;
}
A var_dump ()
по-прежнему показывает их как индексы целочисленных массивов.
Есть ли способ заставить ключи быть строками, чтобы я мог изменить их порядок без разрушения массива?
РЕДАКТИРОВАТЬ :
Я предположил, что если они целые числа, я не могу переупорядочить их без изменения ключ (что важно в этом пример). Однако если бы они были струны, я могу переупорядочить их, как они вроде как индекс не должен быть интерпретируется как особый значение. Во всяком случае, см. Мой вопрос обновление того, как я это сделал (я спустился другой маршрут).
На самом деле они не должны быть в числовом порядке ...
array(208=>'a', 0=> 'b', 99=>'c');
Совершенно верно, если вы назначаете их вручную. Хотя я согласен, что целочисленные ключи могут быть неверно истолкованы как имеющие последовательное значение кем-то, хотя вы могли бы подумать, что если бы они были в нечисловом порядке, было бы очевидно, что это не так. Тем не менее, я думаю, что, поскольку у вас была возможность изменить код при обновлении, это лучший подход.
Возможно, не самый эффективный способ, но простой как пирог:
$keys = array_keys($data);
$values = array_values($data);
$stringKeys = array_map('strval', $keys);
$data = array_combine($stringKeys, $values);
//sort your data
как насчет этого?
$newArray = array();
foreach($oldArray as $key => $value) {
$newArray[$key.''] = $value;
}
редактировать: попробовал и это тоже, и да, это не сработало.
Из документации PHP :
Ключ может быть целым или нить. Если ключ стандартный представление целого числа, это будет интерпретироваться как таковой (т.е. "8" будет интерпретируется как 8, а "08" будет интерпретируется как «08»). Плавает в ключе усекаются до целого числа. Нет разные индексированные и ассоциативные типы массивов в PHP; здесь только один тип массива, который может содержать целочисленные и строковые индексы.
Думаю, теперь это зависит от того, как вы хотите отсортировать массив. (окончательный результат?)
Edit: Это должно сработать
foreach($array as $key => $value) {
$newkey = sprintf('%s',$key);
$newArray["'$newkey'"] = $value;
}