鱼C论坛

 找回密码
 立即注册
查看: 4496|回复: 1

[技术交流] 【php包教不包会系列11】PHP 类型之数组

[复制链接]
发表于 2017-3-18 12:28:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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] = 111;
$a[222] = 333;

var_dump($a);

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

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

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

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

$foo[bar] = 'enemy';
echo $foo[bar];

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 版分割线 ####################


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

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-19 11:29:39 | 显示全部楼层
楼主加油,继续更新额
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 21:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表