《PHP技术大全·第一卷》之数组 Array 细致解读
跟其它语言的区别
学习过其它编程语言如 Java,C 等同学应该知道,这些语言的数组拥有以下两大特点:
数组索引必须为整数,并且默认从0开始计算;
数组元素值必须为同一种类型。
官方介绍 PHP 数组实际上是一个有序的映射(map),映射是一种把多个值(values)关联到对应的多个键(keys)的类型。这种映射类型在很多方面做了优化,因此可以把它当成真正的数组(就是上面说的其它编程语言的数组),或列表(向量)(list(vector)),散列表(hashTable),字典(dict),集合(collection),栈(stack),队列(queue)以及更多的可能,这些都是比较常用的数据结构。由于数组的元素值又可以是一个数组,因此树形结构和多维数组也是被允许的。当然,如果同学们想了解更多关于数据结构的知识,建议购买 C语言描述《数据结构与算法》一书,在这里笔者就不做过多介绍了。
数组键(key)的约定 PHP数组的键(key)可以是整型或者字符串类型,而值(value)可以是任意类型。
如果你给数组的键不是整型或者字符串类型,则PHP会在内部对键的进行类型转换(Type Casting),通过下面的代码示例我们来看下 PHP 是如何进行数组键的类型转换的。
数组常见用法
给数组末尾追加值
,请不要使用 ,因为前者性能会高出很多而且语法简洁。
list 访问数组值
,这样就很快给变量赋值了。
访问字符串的指定位置的字符
,但是字符串并非数组,这里只是 PHP 提供的便捷访问字符串中的字符的一种方式
完全删除数组中指定索引的元素
,这里要注意最好得到的是 而不是 ,另外,我们不能对字符串指定索引的字符进行unset,例如 会导致报错并且不会产生任何效果
访问忘记给数组键加引号访问数组
,由于 hi 和 nihao 都忘记添加引号,因此 PHP 会报 E_NOTICE 级别的通知错误,会但在生产环境下通常 notice 的报错通常会被隐藏,但是呢,PHP 还是会默默地在背后给你做一件事,那就是把定义两个常量: ,但是错误信息还是持续报出来(实现设置 ):「PHP Notice: Use of undefined constant nihao」
强制转换为数组类型
可以对整数,浮点数,字符串,布尔,资源(resource)类型进行强制转换,转换结果示例:
将一个object对象转换成数组会比较神奇,规则如下:
若为 public 则对象属性名就会成为数组的键;
若为 protected 则对象属性名就会在前面带上一个 null(\0)字符,然后接上一个 * 字符,最后在对象属性前面增加一个 null 字符,于是就组合对应的数组键;
若为 private 则对象属性名会在前面带上一个 null 字符,然后接上最后一次集成的属性所属的类名,接着又是一个 null 字符,于是就组合成了对应的数组键; 示例如下:
数组元素的修改
我们可以使用 PHP 引用的来对数组进行修改,代码示例:
最佳实践
PHP 数组包含很多实用的函数,请参考数组函数,记忆一些百利而无一害;
PHP 数组通常关系着系统的性能,所以在定义函数的时候,如果数组参数能够传引用就可以减少性能损耗,因为有时候数组参数会比较大;
本文永久更新链接:
https://gitee.com/nodestudy/phpgod/blob/master/zh/02.4.md
领取专属 10元无门槛券
私享最新 技术干货