PHP - 如何将数字键转换为字符串键?

3
我有几个较早前编写的大型PHP函数,它们包含一些关联数组。到目前为止,这些数组中包含字符串和整数类型的键(例如"brown"和118),因此我对它们没有任何问题。然而,当所有键都是整数时,它们将被转换为0、1等数字,而不是保留原来的键值。
是否有一种方法可以强制数组保留我给定的键,即使它们全都是整数?这些函数非常庞大,改变它们需要太长时间。
编辑:正如Mike B所猜测的那样,我使用了一个排序函数,它似乎重新索引了数组。我使用了在此处找到的一个函数:Sort an Array by keys based on another Array?
其中第一个函数是Erin的,但它没有保留正确的键索引。我尝试了Boombastic编辑过的版本,它运行良好。
感谢您所有的答案!

4
我不确定我理解了。array(5 => 'foo') 创建一个带有整数键 5 和值 foo 的数组,它并不强制从0开始。你是否进行了任何排序?这可能导致 PHP 重新索引键。看到代码会更好理解。 - Mike B
2个回答

3

我有一个类似的问题,使用$array = ['00'=>'x','11'=>'y']时,它被转换为整数键,导致丢失了一个“0”数字。

仅提供一个5年后的答案...

KennyDs的答案可以简化为:

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

...但是,正如MikeB所评论的那样,KennyD的答案是错误的,正确的答案应该是:

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

或者以(丑陋的)函数式风格编写,
 $array = array_flip( array_map('strval', array_flip($array)) );

经过我的检查,没有直接的方法。


关于使用var_dump()var_export()进行检查:当解析为数字时,字符串会显示为数字(例如'123'作为123),但它不会丢失字符串!例如:array ( '00' => 'x', 11 => 'y',)


0

你也可以遍历数组并将所有的整数转换为字符串?

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

编辑:如果您需要将键设为int类型,那么只需确保在填充数组之前,在$key前添加(int)类型转换即可。


4
他的KEYS是int/string类型的,而不是值。到他获得最终数组时,它已经出现了问题。我不认为这能有所帮助。 - Mike B
在编辑后,我也添加了一个解决方案。最好的方法当然是在初始填充数组时始终确保数据设置正确。 - Kenny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接