mumudontcry 发表于 2017-3-18 12:28:15

【php包教不包会系列11】PHP 类型之数组

本帖最后由 mumudontcry 于 2017-3-18 12:38 编辑

PHP 数组

PHP 的数组在手册里的解释比较麻烦,我就不贴出来了,按照我自己的话来说

PHP 的数组大体分为两种,列表以及映射表(键值对形式)
<?php

$arr1 = array(0, 1, 2, 3,);

$arr2 = [
      'name' => '百度',
      'url' => 'http://www.baidu.com'
];

$arr3 = [
      '0' => 'a',
      0 => 'b',
];

我们通过上面这段代码来介绍一下 PHP 数组:

1、两种数组的定义方式,一个是用array关键字,在 PHP5.3(包括5.3)之前,你只能这么定义,在后面的版本,你可以使用[]去定义数组,两者是等价的

2、第一个数组是我说的列表,在 PHP 里被叫做“索引数组”,其实有隐含的键,就是自然数0,1,2,3……,第二个数组是我说的映射表,可以很清楚看到它是一个键值对的形式,在 PHP 里被叫做“关联数组”

3、和其他语言不一样(比如javascript),在js中,索引数组就是 js 的数组,而关联数组就是 js 的对象,需要用大括号表示,但是 PHP 对这两种类型的表不做区分,实际上都是用中括号括起来的,PHP 没有大括号括起来的语法,对象的形式后面去介绍

4、第一个数组中,末尾有一个逗号,第二数组中,末尾没有,这两种形式是等价的,我的习惯是都加,毕竟数组是可扩充的类型,说不定什么时候我又加了一个项(这个项被叫做数组的元素)

5、正如你看到的那样,第一个数组里的元素是数字,第二个数组里的是字符串,实际上,PHP 数组里的值可以放任何数据类型,键只能是字符串(或者数字,如果键是合法的数字形式会被转成数字!),键如果是浮点数,也会被转成数字,类似的,false 也会变成 0,但是一个特殊,null 会被转成空字符串

6、PHP 数组不允许同名的键的存在,后面的元素会覆盖前面的,在第三个数组里,后面的值为 b 的元素最终会覆盖值为 a 的元素,尽管键似乎是不一样的,注意上一条说明的,在转换之后其实是一样的了,所以,PHP 数组不允许同名键的存在

7、我们可以如下去定义一个数组的元素
<?php

$a = 111;
$a = 333;

var_dump($a);

是的,你不需要像一些语言那样,去写一个 $a = []; 先定义这个变量为一个数组,你可以直接使用,当然正是因为这种方便,很多人会吐槽 PHP 不严谨,这种事我们可不管,设计者肯定是希望使用 PHP 的人不需要那么多条条框框

8、如果你直接$a[] = 444; 那么,PHP 会在 222 的基础上加1,实际上效果等价于$a = 444; 如果之前都没有键为数字的元素,那么就是从 0 开始

9、要访问一个元素,你只需要像第7条那样,直接拿来用就ok,比如 $var= $a;

10、对于如下的例子
<?php

$foo = 'enemy';
echo $foo;

PHP 照常运行,但是会报一个错误,因为,PHP 认为,bar这个东西可能是一个常量,你可能会继续定义它,当你确实没有定义它的时候,PHP 无奈把它转成带引号的字符串,这时候,这个转换实际上是不规范的,所以 PHP 还是会给出错误提示,所以,如果你的键里不是:变量、常量、字符串(当然是会带引号的),那么注意一下,可能你的数组定义是不规范的了

提示

说了那么多关于 PHP 数组(以及之前的教程),我们可以看到,其实 PHP 对程序员是不怎么严格要求的,只要你觉得可以通过,它都让你通过了,但是结果就是,你可能会得到你不太想要的结果!因此,不论是之前,或者现在的数组,又或是以后的其他内容,请严格按照 PHP 的规范来,不然出现奇怪的 bug 那真的只能是自己的问题(其他语言例如 javascript 也是一样,不严格的语言说明更需要一个程序员的素养才能写好)

总结

PHP 数组分为两种,索引数组和关联数组,前者以0开始的连续数字作为键,后者以字符串或者数字作为键

PHP 数组的每一个项我们叫做元素,每个元素的值可以是任何类型的数据,键只能是数字或者字符串(如果是其他,最终会转过来,所以说就不能是其他了)

PHP 数组不允许相同键的元素存在,后者会覆盖前者

PHP 数组访问以及定义不需要声明,直接用就行,定义时尽可能不要出现类型转换,所有的代码尽可能不要隐形的类型转换

作业

我们似乎还漏了一个内容,那就是 PHP 的强大的数组函数,见:http://php.net/manual/zh/ref.array.php

我们先了解一下下面几个数组函数:
常用处理函数:array_diff,array_filter,array_intersect,array_merge,array_unique,
常用取值函数:array_search,array_values,range,array_keys,count
常用判断函数:array_key_exists,in_array
常用遍历函数:array_map
常用操作函数:array_push,array_pop,array_shift,array_unshift

了解以上函数,你就基本上可以对 PHP 数组得心应手了,在后面关于 PHP 数组操作的教程里,我会频繁使用这些函数,所以,一定要狠狠了解上面的几个函数!

#################### 华丽的 PHP 版分割线 ####################


如果喜欢木木的讲解,就点击下方的订阅(读作:打赏),给木木点个赞吧,欢迎大家提出建议或者指正

一块钱买不了皮肤,买不了香烟,却可以跟着木木一起打怪升级,并给木木巨大的支持,有了大家的力量,木木就可以制造元气弹,打败……嗯,买一个好一点的女朋友啦

569529989 发表于 2017-3-19 11:29:39

楼主加油,继续更新额{:5_91:}
页: [1]
查看完整版本: 【php包教不包会系列11】PHP 类型之数组