【问题标题】:PHP - Cast int key to string? [duplicate]PHP - 将int键转换为字符串? [复制]
【发布时间】:2011-11-26 00:30:04
【问题描述】:

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

有没有办法强制一个数组保留我给它的键,即使它们都是 int?函数很大,改起来也太费时间了。

编辑

按照 Mike B 的直觉,我使用了一个排序函数,它似乎可以重新索引数组。我使用的是在这里找到的函数:Sort an Array by keys based on another Array?

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

感谢您的所有回答!

【问题讨论】:

  • 我不确定我是否理解。 array(5 => 'foo') 创建一个具有整数键 5 和值 foo 的数组。它不会强制从 0 开始。您是否在进行任何排序?这可能会导致 PHP 重新索引键。看代码会有帮助。

标签: php arrays key int associative


【解决方案1】:

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

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

编辑:如果您需要将键设置为 int,则只需确保在填充数组时在 $key 之前添加 (int) 强制转换。

【讨论】:

  • 他的 KEYS 是 int/string,而不是值。而当他得到他的最后一个阵列时,它已经被fubared了。我不明白这有什么帮助。
  • 在 Edit: 之后也添加了一个解决方案。最好是始终确保在初始填充时数组中的数据设置正确。
【解决方案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),但是它不会丢失字符串(!),例如array ( '00' => 'x', 11 => 'y',)

【讨论】:

    猜你喜欢
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 2011-06-18
    • 2013-10-23
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多