一尘不染

如何强制PHP将字符串用作数组键?

php

我遇到了一个使用ID来命名类型数组的旧应用,例如…

array(1) {
  [280]=>
  string(3) "abc"
}

现在,我需要对它们进行重新排序,并且a 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()仍将它们显示为整数数组索引。

有没有一种方法可以将键强制为字符串,这样我就可以在不破坏数组的情况下对其重新排序?


阅读 450

收藏
2020-05-29

共1个答案

一尘不染

编辑

我假设如果它们是整数,则不能在不更改键的情况下对其重新排序(在此示例中很重要)。但是,如果它们是字符串,我可以对其重新排序,因为不应将索引解释为具有任何特殊含义。无论如何,请查看我的问题更新以了解我的操作方式(我走了另一条路)。

实际上,它们不必按数字顺序…

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
2020-05-29