php整理(二): 数组
数组:
首先说一下对PHP中的理解,建立一个好的理解模型还是很关键的:
1.PHP中的数组实际上可以理解为键值对,key=>value;而对于key的取值,可以是string/integer;value则是任意数据类型,不仅仅是基本数据类型,引用类型也是可以的,比如说数组;
2.既然key是数据类型,就有相互转换,当定义key是1.0时,将会被转换成1,等等之类的;当然,key也可以是空,也可以重复,只是后面的会覆盖前面的
3.由于是弱语言,里边就有很多松散的样子,比如arr[]="value";这也可以存在,会直接创建数组(先理解到这,以后再精确的理解和整理);
定义: PHP 中的 数组 实际上是一个有序映射.映射是一种把values关联到keys的类型.在数组中长度不固定,切能够是任何数据类型. 出于这个原因, 数组有两种类型: 索引数组和关联数组.
索引数组: 数组中的keys值是integer,即从0开始到(length-1); 可以通过索引直接访问数组中的values;
关联数组:keys的数据类型是string类型, 也可以通过索引直接访问,只是不能应用到类似于for循环这样的遍历数组之中.
注:PHP 数组可以同时含有 integer 和 string 类型的键名,因为 PHP 实际并不区分索引数组和关联数组。
定义语法:

- 1 $arr_1=array( keys1 => values1,keys2 => values2
- 2 //, ...关联数组
- 3 );
- 4 $arr_2=array( values1,values2
- 5 // .....索引数组
- 6 );
- 7 // 键(key)可是是一个整数 integer 或字符串 string
- 8 // 值(value)可以是任意类型的值

遍历数组:
1.for循环:由于用到整型才能执行for循环,所以for循环只能用到索引数组中.
语法:
- 1 for($i=0;$i<count($arr);$i++){};
2.foreach:遍历数组,可以遍历任何类型的数组,最为常用的一种.

- 1 foreach($arr as $values){ //对值操作
- 2 echo $values." ";
- 3 };
- 4 echo "<br/>";
- 5 foreach($arr as $key => $values){ //操作keys和values
- 6 echo $key."=>".$values." ";
- 7 };
- 8 /*
- 9 结果:
- 10 1 2 3 4 aa
- 11 0=>1 1=>2 2=>3 3=>4 4=>aa
- 12
- 13 */

3.each()和list():
each():返回数组中当前的键/值对并将数组指针向前移动一步, 在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元(执行最后一个之后,下一次执行将会返回一个空数组)。返回一个数组,包括当前指针下的数组元素的keys和values;

- 1 $arr=array(1,2,3,4,"aa");
- 2 print_r($arr);
- 3 echo "<br/>";
- 4 $arr1=array("one"=>10,"two"=>20,"three"=>"aa");
- 5 print_r($arr1);
- 6 echo "<br/>";
- 7 $arr2=each($arr);
- 8 print_r($arr2);
- 9 echo "<br/>";
- 10 //执行了3次;
- 11 $arr3=each($arr1);
- 12 print_r($arr3);
- 13 echo "<br/>";
- 14 $arr3=each($arr1);
- 15 print_r($arr3);
- 16 echo "<br/>";
- 17 $arr3=each($arr1);
- 18 print_r($arr3);

结果:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => aa )
Array ( [one] => 10 [two] => 20 [three] => aa )
Array ( [1] => 1 [value] => 1 [0] => 0 [key] => 0 )
Array ( [1] => 10 [value] => 10 [0] => one [key] => one ) //指针向前移动了
Array ( [1] => 20 [value] => 20 [0] => two [key] => two )
Array ( [1] => aa [value] => aa [0] => three [key] => three )
list():把数组中的值赋给一些变量 ,像 array() 一样,这不是真正的函数,而是语言结构。 list() 用一步操作给一组变量进行赋值。 list() 仅能用于数字索引的数组并假定数字索引从 0 开始。

- 1 $arr=array(1,2,3,4,"aa");
- 2 print_r($arr);
- 3 echo "<br/>";
- 4 $arr1=array("one"=>10,"2"=>20,"three"=>"aa");
- 5 print_r($arr1);
- 6 list($first,$second,$three)=$arr;
- 7 echo "<br>";
- 8 echo $first." ".$second." ".$three;
- 9 list($first,$second,$three)=$arr1;
- 10 echo "<br>";
- 11 echo $first." ".$second." ".$three;//对key不是整数的赋值
- 12 echo "<br/>";
- 13 list(,,$three)=$arr;//可以跳过输入,不能不写,用,隔开
- 14 echo $three;

运行的结果:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => aa )
Array ( [one] => 10 [2] => 20 [three] => aa )
1 2 3
20
3
这个地方来回顾一下boolean类型:
这是一个最简单的数据类型
要明确地将一个值转换成 boolean ,用 (bool) 或者 (boolean) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换。
参见类型转换的判别。
当转换为 boolean 时,以下值被认为是 FALSE
:
- 布尔值
FALSE
本身 - 整型值 0(零)
- 浮点型值 0.0(零)
- 空字符串,以及字符串 "0"
- 不包括任何元素的数组
- 不包括任何成员变量的对象(仅 PHP 4.0 适用)
- 特殊类型 NULL(包括尚未赋值的变量)
- 从空标记生成的 SimpleXML 对象
所有其它值都被认为是 TRUE
(包括任何资源)。

- 1 <?php
- 2 var_dump ((bool) "" ); // bool(false)
- 3 var_dump ((bool) 1 ); // bool(true)
- 4 var_dump ((bool) - 2 ); // bool(true)
- 5 var_dump ((bool) "foo" ); // bool(true)
- 6 var_dump ((bool) 2.3e5 ); // bool(true)
- 7 var_dump ((bool) array( 12 )); // bool(true)
- 8 var_dump ((bool) array()); // bool(false)
- 9 var_dump ((bool) "false" ); // bool(true)
- 10 ?>

这样我们可以利用这一点来用list()和each()来输出数组,和foreach的功能是一样的,可以访问两种数组

- 1 while (list($key,$value)=each($arr)){//这个地方就是当为空的时候停止
- 2 echo $key."=>".$value."<br/>";
- 3 };
- 4 while (list($key,$value)=each($arr)){//不会再执行,因为指针已经是最后一个
- 5 echo $key."=>".$value."<br/>";
- 6 };

运行结果:
0=>1
1=>2
2=>3
3=>4
4=>5
for循环来实现这个功能
- 1 for($i=0;$i<count($arr);$i++){
- 2 list($a,$b)=each($arr);
- 3 echo $a."=>".$b."<br/>";
- 4 }
运行结果:
0=>1
1=>2
2=>3
3=>4
4=>5
4.使用指针来遍历数组
key()-返回数组中的key
current() - 返回数组中的当前value
end() - 将数组的内部指针指向最后一个单元
prev() - 将数组的内部指针倒回一位
next()- 将数组的内部指针向前一位
reset() - 将数组的内部指针指向第一个单元,复原
这里边的参数都是要操作的数组

- 1 echo key($arr);//返回当前数组当前指针下的key;
- 2 echo " ";
- 3 echo current($arr);//返回当前数组当前指针下的values;
- 4 echo "<br/>";
- 5 next($arr);//下移一个指针
- 6 echo key($arr);
- 7 echo " ";
- 8 echo current($arr);
- 9 echo "<br/>";
- 10 prev($arr);//前移一个指针
- 11 echo key($arr);
- 12 echo " ";
- 13 echo current($arr);
- 14 echo "<br/>";
- 15 end($arr);//移到最后一个
- 16 echo key($arr);
- 17 echo " ";
- 18 echo current($arr);
- 19 echo "<br/>";
- 20 reset($arr);//移到第一个
- 21 echo key($arr);
- 22 echo " ";
- 23 echo current($arr);
- 24 echo "<br/>";

运行结果:
0 1
1 2
0 1
4 5
0 1
组合使用,遍历数组
- 1 $arr=array("one"=>1,"two"=>2,"three"=>3,4,5);
- 2 do{
- 3 echo key($arr)."=>".current($arr)."<br/>";
- 4 }while(next($arr));
运行结果:
one=>1
two=>2
three=>3
0=>4
1=>5
预定义数组:
常用的函数:
(1)in_array(value,array[,strict=true|false]);-检查数组是不是有某值,返回true 或 false;strict=true严格类型的检查,意思就是:1和"1"是不一样的;错误返回null;
- 1 $arr=array("one"=>1,"two"=>2,"three"=>3,4,5);
- 2 var_dump(in_array("1",$arr));//bool(true)
- 3 var_dump(in_array("1", $arr,true));//bool(false)
- 4 var_dump(in_array("1", $arr,false));//bool(true)
(2)array_reverse(array);反转数组,返回一个单元相反的数组
- 1 $arr=array("one"=>1,"two"=>2,"three"=>3,4,5);
- 2 print_r($arr);
- 3 echo "<br/>";
- 4 print_r(array_reverse($arr));
结果:
Array ( [one] => 1 [two] => 2 [three] => 3 [0] => 4 [1] => 5 )
Array ( [0] => 5 [1] => 4 [three] => 3 [two] => 2 [one] => 1 )
(3)count(array);返回数组元素(键值对)的个数;
- 1 $arr=array("one"=>1,"two"=>2,"three"=>3,4,5);
- 2 echo count($arr);// 5
(4)array_unique();返回一个去重的新数组;
- 1 $arr=array("one"=>1,"two"=>2,4,"three"=>4,4);
- 2 $arr1=array_unique($arr);
- 3 print_r($arr1);//b保留最前边的那个
结果:
Array ( [one] => 1 [two] => 2 [0] => 4 )
(5)unset(array);没有返回值,只是用来修改 数组----释放给定的变量

- 1 $arr=array("one"=>1,"two"=>2,4,"three"=>4,4);
- 2 print_r($arr);
- 3 echo "<br/>";
- 4 unset($arr['one']);
- 5 print_r($arr);
- 6 unset($arr);
- 7 print_r($arr);//数组已被删除
- 8 $a=1;
- 9 echo "<br/>";
- 10 echo $a;
- 11 unset($a);
- 12 echo $a;//变量已经被删除
- 13 //unset($a,$b,$c)一次销毁多个变量

运行结果:
报没有变量的警告,说明变量已经被销毁了
(6)array_values(array);返回数组中所有的值并给其建立数字索引。
- 1 $arr=array("one"=>1,"two"=>2,4,"three"=>4,4);
- 2 print_r($arr);
- 3 echo "<br/>";
- 4 print_r(array_values($arr));
运行结果:
Array ( [one] => 1 [two] => 2 [0] => 4 [three] => 4 [1] => 4 )
Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 4 [4] => 4 )
(7)array_merge(array1,array2.....);合并多个数组,返回合并后的数组
- 1 $arr=array("one"=>1,"two"=>2,4,"three"=>4,4);
- 2 print_r(array_merge($arr,$arr));
运行结果:
Array ( [one] => 1 [two] => 2 [0] => 4 [three] => 4 [1] => 4 [2] => 4 [3] => 4 )
(8)array_push();在数组的后面加入元素,返回加入元素之后的数组的个数,改变原来的数组

- 1 $arr=array("one"=>1,"two"=>2,4,"three"=>4,4);
- 2 print_r($arr);
- 3 echo "<br>";
- 4 echo count($arr);
- 5 echo "<br>";
- 6 echo array_push($arr, 2);
- 7 echo "<br>";
- 8 print_r($arr);

运行结果:
Array ( [one] => 1 [two] => 2 [0] => 4 [three] => 4 [1] => 4 )
5
6
Array ( [one] => 1 [two] => 2 [0] => 4 [three] => 4 [1] => 4 [2] => 2 ) php
php整理(二): 数组的更多相关文章
- 单元测试系列之十:Sonar 常用代码规则整理(二)
摘要:帮助公司部署了一套sonar平台,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ======== ...
- Swift语法基础入门二(数组, 字典, 字符串)
Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...
- Sonar 常用代码规则整理(二)
摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ============ ...
- JS知识点整理(二)
前言 这是对平时的一些读书笔记和理解进行整理的第二部分,第一部分请前往:JS知识点整理(一).本文包含一些易混淆.遗漏的知识点,也会配上一些例子,也许不是很完整,也许还会有点杂,但也许会有你需要的,后 ...
- Deep Learning(深度学习)学习笔记整理(二)
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- [jQuery学习系列二 ]2-JQuery学习二-数组操作
前言 上一篇内容 已经对于Jquery 有了一些认识, 包括Jquery的选择器和DOM对象, 那么这一篇继续来看下Jquery中很实用的Jquery对于数组的操作. Jquery中对数组的操作大致有 ...
- Java编程思想学习(十二) 数组和容器
一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的 ...
- PHP学习(二)----数组
数组: 首先说一下对PHP中的理解,建立一个好的理解模型还是很关键的: 1.PHP中的数组实际上可以理解为键值对,key=>value;而对于key的取值,可以是string/integer;v ...
- Java菜鸟学习笔记--数组篇(二):数组实例&args实例
基本类型实例 //1.定义一个一维数组,先声明,在分配空间 int []number;//生命,没有初始化,number=null number=new int[5];//初始化为默认值,int默认值 ...
随机推荐
- php开发过程中用什么方法来加快页面的加载速度
1,数据库优化;2,php缓存;3,使用zend引擎(其它框架);4,分布式部署;5,静态
- SharePoint 101 Code Samples are now available
The Microsoft Office Developer Center has created 101 code samples for SharePoint 2010. These sample ...
- 屏蔽ios7中某个页面的默认手势滑回返回
- (void)viewWillDisappear:(BOOL)animated {[super viewWillDisappear:YES];self.navigationController.in ...
- vim插件介绍
代码补全 http://blog.sina.com.cn/s/blog_a6559d920101acv3.html这个牛逼.************************************** ...
- [BC]BestCoder Round#86小结
1001 [题意] 给定一个长度为n(n<=100000)的正整数序列,给出m(m<=100000)个子集合和的记录,问哪些一定比正确的记录多了 [题解] 对正整数序列求和,记录比和大的一 ...
- Node.js 随记
http://nodejs.org/ 下载并安装 node.js 最新版本 运行cmd,输入npm install xxxxxx 回车,安装扩展模块,如:express,socket.io等 运行c ...
- mysqlbinlog工具基于日志恢复详细解释
如果每天都会生成大量的二进制日志,这些日志长时间不清理的话,将会对磁盘空间带来很大的浪费,所以定期清理日志是DBA维护mysql的一个重要工作 1)RESET MASTER在上面查看日志存放的文件夹中 ...
- 【redis】06Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存
上节课详细讲解了redis数据库的常用命令,以及redis数据库高级应用当中的, 安全性,跟咱们的主从复制, 这节课呢,咱们继续来讲咱们的高级应用, 首先来看一下咱们的事务处理, 事务处理 我前面说过 ...
- hdu 1757 A Simple Math Problem (矩阵快速幂,简单)
题目 也是和LightOJ 1096 和LightOJ 1065 差不多的简单题目. #include<stdio.h> #include<string.h> #include ...
- 如何防止通过IP地址访问Tomcat管理页面
方法:建议修改webapps下面的原始文件夹的名称,比如加一个后缀: 当需要用管理页面的时候,可以将含有manager的文件夹的后缀去掉即可 manager和host-manager共2个文件夹