您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关PHP中怎么实现数组Key的强制类型转换,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
$arr = [
"1" => "a",
"01" => "b",
1 => "aa",
1.1 => "aaa",
"0.1" => "bb",
];
var_dump($arr);
// array(3) {
// [1] =>
// string(3) "aaa"
// '01' =>
// string(1) "b"
// '0.1' =>
// string(2) "bb"
// }
咦?我们定义的"1"、1下标的值都变成了1.1的"aaa"了?
没错,PHP中的数组Key值只接受数字和字符串类型,当Key是字符串时,会强制转换为数字类型,遵守类型强制转换的规则。浮点数也是同样的道理,直接转换成了向下取整的整型。
那么"0.1"和"01"为什么还在?首先,"01"不是标准的十进制数值,无法转换成整型,所以"01"还是一个字符串下标,那"0.1"呢?它当然也不是一个标准的十进制数值。这里是违背了字符串转型数字的强制类型转换原则的,在变量的强制转换中,这两种字符串都会被转换为0,但在数组中则不会,这里会是一个坑,也是需要注意的地方。
在PHP官方文档中给出的Key值转换说明如下:
包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
接下来,是笔者曾经做过的一道面试题,和这个类型转换有着非常大的关系,代码如下:
$a = ['a'];
$a[2] = 'b';
$a[] = 'c';
$a['1'] = 'd';
// 以下循环的输出结果是?
foreach ($a as $v) {
echo $v, ',';
}
// 以下循环的输出结果是?
for ($i = 0; $i < count($a); ++$i) {
echo $a[$i], ' ,';
}
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
关于PHP中怎么实现数组Key的强制类型转换就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。