千家信息网

PHP中怎么实现数组Key的强制类型转换

发表于:2024-10-27 作者:千家信息网编辑
千家信息网最后更新 2024年10月27日,这篇文章将为大家详细讲解有关PHP中怎么实现数组Key的强制类型转换,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先来看下面这样一段代码:$arr
千家信息网最后更新 2024年10月27日PHP中怎么实现数组Key的强制类型转换

这篇文章将为大家详细讲解有关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的强制类型转换就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0