• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP数组Key强制类型转换实现原理解析

    PHP是弱类型语言,就像JavaScript一样,在定义变量时,不需要强制指定变量的类型。同时,PHP又有着强大的数组功能,数组的Key即可以是普通的数字类型下标,也可以是字符串类型的Hash键值,那么,当一个数组的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值转换说明如下:

    接下来,是笔者曾经做过的一道面试题,和这个类型转换有着非常大的关系,代码如下:

    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], ' ,';
    }

    大家先不要运行,直接看代码看看能不能看出这两段代码的输出结果会是什么,然后运行一下,看看结果和你想像的是不是一样。

    测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/201910/source/关于PHP数组Key的强制转换.php

    参考资料: https://www.php.net/manual/zh/language.types.array.php

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • 详解PHP的执行原理和流程
    • 通过代码实例解析PHP session工作原理
    • 深入解析PHP底层机制及相关原理
    • PHP数组实际占用内存大小原理解析
    • PHP超全局变量实现原理及代码解析
    • JS PHP字符串截取函数实现原理解析
    • PHP unset函数原理及使用方法解析
    • PHP 命名空间原理与用法详解
    • 如何理解PHP程序执行的过程原理
    上一篇:Laravel中GraphQL接口请求频率实战记录
    下一篇:PHP如何使用array_unshift()在数组开头插入元素
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP数组Key强制类型转换实现原理解析 PHP,数组,Key,强制,类型,转换,