2011-09-27 86 views
2

我有一些前段时间编写的大型PHP函数。它们包含一些关联数组。到目前为止,我对这些数组没有任何问题,因为它们包含字符串和int类型的键(如“brown”和118)。问题是,当密钥都是int时,它们不会被保留,而是被转换为0,1等。PHP - 将int int键转换为字符串?

有什么办法可以强制数组保持我给它的密钥,即使它们都是int吗?这些功能非常大,需要很长时间才能更改它们。

EDIT

作为麦克乙直觉,我使用这似乎重新索引阵列分拣功能。我正在使用我在这里找到的函数:Sort an Array by keys based on another Array?

这是Erin的第一个,但它没有保留正确的索引。我尝试了Boombastic编辑的版本,效果很好。

感谢您的所有答案!

+4

我不确定我是否理解。 'array(5 =>'foo')'用整数键5和值foo创建一个数组。它不会强制它从0开始。你在做任何分类吗?这可能会导致PHP重新索引密钥。看到代码会有所帮助。 –

回答

1

你也可以通过数组并将所有int转换为一个字符串?

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

编辑:如果你需要你的钥匙是整数,那么只需要确保当你填写你的$键之前添加一个(INT)投阵列。

+0

+1你比我快:) – diEcho

+4

他的键是int/string,而不是值。到了他最后的阵容时,它已经变得模糊了。我不明白这可能会有什么帮助。 –

+0

在Edit:之后也为此添加了解决方案。最好的办法是始终确保数据在初始填充课程时在数组中正确设置。 – Kenny

2

我也有类似的问题$array = ['00'=>'x','11'=>'y']被转换为整数键,丢失'0'数字。

只写提供一个答案5年后...

的KennyDs答案可以通过简化,

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

...但是,作为MikeB评论,KennyDs答案是错的,正确的是:

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

或在(难看)功能的风格,

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

(没有直接的方式,因为我检查)。


关于检查由var_dump()var_export():显示的字符串作为数字时解析为数字(例如'123'123),但是,它不会丢失串的例子(!)。