你不能!!
包含有效整数的字符串将转换为整数类型。例如,密钥“8”实际上将存储在8下。另一方面,“08”不会被强制转换,因为它不是有效的十进制整数。
编辑:
其实你可以!!将顺序数组转换为关联数组
$obj = new stdClass;
foreach($array as $key => $value){
$obj->{$key} = $value;
}
$array = (array) $obj;
在大多数情况下,以下引用是正确的:
包含有效整数的字符串将转换为整数类型。例如,密钥“8”实际上将存储在8下。另一方面,“08”不会被强制转换,因为它不是有效的十进制整数。
这个例子来自 PHP 文档
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?>
上面的示例将输出:
array(1) {
[1]=> string(1) "d"
}
因此,即使您要创建一个带有编号键的数组,它们也只会被转换回整数。
不幸的是,直到最近我才意识到这一点,但我想我会分享我失败的尝试。
失败的尝试
$arr = array_change_key_case($arr); // worth a try.
返回一个数组,其中包含数组中所有小写或大写的键。编号索引保持原样。
我的下一个尝试是通过将旧值作为新(字符串)键来创建新数组。array_combine
我尝试了几种使数组包含字符串类型的数值的方法。$keys
range("A", "Z" )
适用于字母表,所以我会尝试使用数字字符串。
$keys = range("0", (string) count($arr) ); // integers
这导致了一个充满键的数组,但都是int类型。
下面是创建具有 string 类型值的数组的几次成功尝试。
$keys = explode(',', implode(",", array_keys($arr))); // values strings
$keys = array_map('strval', array_keys($arr)); // values strings
现在只是将两者结合起来。
$arr = array_combine( $keys, $arr);
这是我发现数字字符串被转换为整数的时候。
$arr = array_combine( $keys, $arr); // int strings
//assert($arr === array_values($arr)) // true.
将键更改为字符串并维护其文本值的唯一方法是在键前面加上一个小数点或 。"00","01","02"
"0.","1.","2."
你可以像这样实现这个目标。
$keys = explode(',', implode(".,", array_keys($arr)) . '.'); // added decimal point
$arr = array_combine($keys, $arr);
当然,这并不理想,因为您需要像这样定位数组元素。
$arr["280."]
我创建了一个小函数,即使您只输入整数而不是新字符串,它也将针对正确的数组元素。
function array_value($array, $key){
if(array_key_exists($key, $array)){
return $array[ $key ];
}
if(is_numeric($key) && array_key_exists('.' . $key, $array)){
return $array[ '.' . $key ];
}
return null;
}
用法
echo array_value($array, "208"); // "abc"
编辑:
其实你可以!!将顺序数组转换为关联数组
所有这一切都是徒劳的