强制转换后,我遇到了奇怪的 PHP 行为。这是代码:
$obj = new stdClass();
$obj->{'0'} = "test";
$array = (array)$obj;
var_dump($array);
此代码将输出:
array(1) { ["0"]=> string(4) "test" }
绝对正常。
现在我添加一些代码:
foreach ($array as $key => $value) {
$array[$key] = strtoupper($value);
}
var_dump($array);
此代码输出:
array(2) {
["0"]=>
string(4) "test"
[0]=>
string(4) "TEST"
}
为什么我的 $key 强制转换为 int ?
如果我尝试一个更简单的例子:
$array = array("0" => "test");
foreach ($array as $key => $value) {
$array[$key] = strtoupper($value);
}
var_dump($array);
这将输出:
array(1) { [0]=> string(4) "TEST" }
有人知道为什么我的 $key 会转换为 int 吗?
更新
我试图强制将我的密钥转换为字符串:
$array["{$key}"] = $value;
和
$array[(string)$key] = $value;
但它们是作为 int 插入的。所以我的问题应该是:有没有办法将键作为字符串插入到数组中?
我知道我可以通过使用第二个数组并解除字符串来解决我的问题:
$obj = new stdClass();
$obj->{'0'} = "test";
$array = (array)$obj;
$array2 = array();
foreach ($array as $key => $value) {
$array2[$key] = strtoupper($value);
}
但是如果以一种更漂亮的方式来制作它会很好,保留数据类型(并避免在迭代条目时重复条目,如前所述)。