3

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

有没有办法强制一个数组保留我给它的键,即使它们都是 int 的?这些功能非常大,更改它们需要很长时间。

编辑

正如 Mike B 直觉的那样,我使用了一个似乎重新索引数组的排序函数。我正在使用我在这里找到的一个函数:Sort an Array by keys based on another Array?

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

感谢您的所有回答!

4

2 回答 2

3

我有类似的问题,$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()or var_export():在解析为数字时将字符串显示为数字(例如'123'as 123),但是,它不会丢失字符串(!),例如array ( '00' => 'x', 11 => 'y',)

于 2016-08-21T02:56:07.033 回答
0

您也可以遍历数组并将所有 int 转换为字符串?

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

编辑:如果你需要你的键是 int,那么只需确保在填充数组时在 $key 之前添加一个 (int) 强制转换。

于 2011-09-27T12:41:43.927 回答