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和values6 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 <?php2 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
转载于:https://www.cnblogs.com/hellodp/p/5440486.html
php整理(二): 数组相关推荐
- 微信小程序坐标位置接口使用整理(二)地图接口
微信小程序坐标位置接口使用整理(二) 微信小程序中实现更多地图服务,可以使用腾讯地图Api. 以下几个场景是使用地图Api调用. 官方Api:微信小程序JavaScript SDK | 腾讯位置服务 ...
- Deep Learning(深度学习)学习笔记整理(二)
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流 [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之: ...
- Auto.js 全命令整理(二) 对应用命令专题
Auto.js 全命令整理(二) 对应用命令专题 目录 Auto.js 全命令整理(二) 对应用命令专题 对应用命令 回顾-应用数据获取 末 对应用命令主要用于确认屏幕显示的是否是正确的页面,so,并 ...
- c语言未初始化的指针下标访问是0,C语言的二数组的指针访问.doc
C语言的二数组的指针访问 二维数组的指针访问 --王炳华 指向二维数组的指针及用指针访问二维数组,是学习指针的最大难点.如果真正弄懂了这个问题,就可以说你学会了使用指针. 二维数组的指针 指针就是地址 ...
- oracle中部门工资降序排列,oracle面试题整理二(10级学员 乔宇整理)
Oracle面试题整理二(10级学员 乔宇整理) 1.查询工资最高的3 名员工信息 select * from (select * from emp order by sal desc) where ...
- libsvm回归参数寻优cgp_【lightgbm/xgboost/nn代码整理二】xgboost做二分类,多分类以及回归任务...
1.简介 该部分是代码整理的第二部分,为了方便一些初学者调试代码,作者已将该部分代码打包成一个工程文件,包含简单的数据处理.xgboost配置.五折交叉训练和模型特征重要性打印四个部分.数据处理部分参 ...
- .NetCore中EFCore for MySql整理(二)
一.简介 EF Core for MySql的官方版本MySql.Data.EntityFrameworkCore 目前正是版已经可用当前版本v6.10,对于以前的预览版参考:http://www.c ...
- 【100题】第三十二 数组、规划
一,题目:有两个序列a,b,大小都为n,序列元素的值任意整数,无序:要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小. 例如: ...
- 算法整理(二)---快速排序的两种实现方式:双边扫描和单边扫描
首先简单谈下快速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).因为用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法. ...
- Android LCD整理二:mtk平台LCD流程分析(LK部分)
一.LK显示代码分析 1.platform_init代码分析 //framebuffer的大小 g_fb_size = mt_disp_get_vram_size(); //framebuffer的起 ...
最新文章
- Python:机器视觉与Tesseract介绍
- [JVM]线上CPU负载持续飙高的问题解决
- 列表自定义的Type和BaseType参考
- SQL Server 2008 允许远程链接 解决方法
- python离散余弦变换_在python3下使用OpenCV做离散余弦变换DCT及其反变换IDCT
- Log4Net 最简配置
- SpringCloud Zuul(四)之工作原理
- php.ini开启命名空间,Zend Framework教程之模型Model基本规则和使用方法
- Oracle tips
- Mr.J--.c 和.cpp 后缀详解
- 非洲做生意进货渠道_WikiFundi如何帮助非洲人民为维基百科做贡献
- 002redis常用的数据结构
- C#:安装Windows服务,动态指定服务名及描述
- 成功 打不开_switch商店打不开怎么办?手把手教你用这五种方法成功进入eshop
- 多对多表的创建方式 forms组件 session与cookie
- 关于IPad忘记密码恢复出厂设置的办法
- 如何用手机保存APP上的视频
- 上网访问速度慢的原因(计算机网络常识)
- Ubuntu与windows之间实现复制粘贴
- 深入理解计算机大端与小端
热门文章
- SQL Server(三):Select语句
- 图解 TCP IP 协议:三次握手、四次挥手
- JavaScript由浅到深【含案例源码】
- MinIO之Windows环境的搭建
- JS获取浏览器高度、屏幕高度、宽屏
- ios transporter 缓存_鸿蒙和安卓都是开源,为什么iOS系统却可以获得出色的口碑?...
- 怎样把百度图片设置成传统翻页 瀑布流与传统翻页的转换
- (day 16 - 双指针)剑指 Offer 35. 复杂链表的复制
- Html+Css打造一个精美的注册页面
- adguard自定义_搭建AdGuard Home自定义dns,实现全设备拦截广告的目的