PHP学习笔记——7.数组

1.数组的定义

  若干数据,希望有关联性,且不想定义成多个变量,即可定义为数组

  一:数组的编号是唯一的,用于区分单元

  编号 => 键/key(关联数组)、索引/index(索引数组)、下标(俗称)

  二:存储的内容称为 值/value

2.数组的声明

  数组即使键/值对的集合

  方法一:初始化方式

  $arr = null;

  $arr[‘键1‘] = ‘值1‘;

  $arr[‘键2‘] = ‘值2‘;

  ...

  方法二:array结构方式

  $arr = array(‘key1‘=>‘value1‘,‘key2‘=>‘value‘...);

  方法三:自动分配索引方式

  $arr = array(‘value1‘,‘value2‘...);

  PHP会自动由0开始分配索引值

3.数组的下标该怎么写

  $arr = array(1=>‘中‘,‘name‘=>‘张三‘);

  echo $arr[1],$arr[‘1‘],$arr["1"]; =>中 中 中

  虽然都得到了结果,但需要把字符串的‘1‘,"1"先转换,

  在寻找单元,影响了效率

  所以,数字的下标是不必加单/双引号的

  echo $arr[name],$arr[‘name‘],$arr["name"]; =>张三 张三 张三

  不加单/双引号,PHP会优先将其当成常量进行解析

  若没有该常量,才将其解析为字符串

  所以,字符串下标需要加单/双引号以避免因常量定义而产生的错误

  又因单引号比双引号解析快,所以优先加单引号

4.数组单元值的类型

  所有八种类型均可,即数组的值仍可是一个数组(称为二维/多维数组)

  使用 数组[‘键‘][‘键‘]; 可找到二维数组中的值

5.数组的遍历

  foreach(数组变量 as [键变量=>]值变量 ) {

  ...

  }

  遍历数组的每个单元,把单元的键赋予给键变量,把单元的值赋予给值变量

6.数组的游标操作

  current(数组变量); =>取出指针指向单元的值;指针初始化指向第0个单元

  key(数组变量); =>取出指针指向单元的键

  next(数组变量); =>将指针向尾部移一位

  prev(数组变量); =>将指针向头部移一位

  end(数组变量); =>将指针指向最后一个单元上

  reset(数组变量); =>将指针重置指向第0个单元

  用for配合游标操作进行数组遍历:

  for( ;current($arr);next($arr)){

  echo key($arr),‘:‘,current($arr);

  }

  当current($arr)条件的值为" ",0,false,‘0‘,null时,条件为假,循环退出

7.list与each

  each(数组变量); =>将指针指向当前单元的信息组成一个数组,且指针向尾部移一位

  所得数组为:array(1=>‘value‘;value=>‘value‘;0=>‘key‘;key=>‘key‘;)

  使用each进行数组遍历

  while($ceil=each($arr)){

  echo $ceil[0],‘~‘,$ceil[1];

  或 echo $ceil[key],‘~‘,$ceil[value];

  }

  each经常与list配合使用

  list是重合赋值语句,可以一次性为多个变量赋值

  在实际应用中,常用于——将数组的单元分配赋予给多个变量

  例:$arr = array(‘春‘,‘夏‘,‘秋‘,‘冬‘);

  list($spr,$sum,$fall,$win)=$arr;

  echo $spr; =>春

  按list中的变量从左向右依次对应数组中的单元(由下标0开始)

  若数组中有某个单元不存在,则当做null处理

  例:list($a,$b,$c)=array(2=>‘赵‘,3=>‘钱‘,1=>‘孙‘);

  echo $a,$b,$c; =>null 孙 赵

  注意:分配是由左向右的,而赋值的过程是反向的

  例:list($arr[0],$arr[1],,$arr[2])=

  array(3=>‘赵‘,1=>‘钱‘,5=>‘孙‘,2=>‘李‘,0=>‘燕‘);

  print_r($arr);

  分配: 赋值:

  $arr[0] => array[0] $arr[2] = 赵

  $arr[1] => array[1] $arr[1] = 钱

  => array[2] $arr[0] = 燕

  $arr[2] => array[3]

  使用each与list配合的方式进行数组遍历

  function for_each($arr){

  while(list($k,$v) each($arr)){

  echo $k,$v;

  }

  }

  $arr = array(..);

  for_each($arr);

8.数组函数

  count(数组变量,[true]); =>计算数组中的单元数量

  传入的可以是数组,也可以是非数组

  而返回值则根据传入参数分为:

  数组:单元数量(不进入多维数组中计算)

  null:0

  非数组/非null:1

  当输入可选参数true时,则按照递归方式计算数量

  递归:即进入多维中计算数量

  如:$arr = array(‘a‘,‘b‘,array(‘c‘,‘d‘));

  则 echo count($arr,true); =>5

  一维中有:a b array() 二维中有:c d 共5个

  array_key_exists(‘key‘,$arr); =>判断数组中是否有该键

  isset($arr[‘key‘]);也具有该作用

  二者区别:

  isset是语法结构,省去了一次函数调用,速度快

  单因其是根据键值进行判断的,若出现有键值为null时,则返回false

  总结:如果数组是动态生成,不好判断键与值时,用array_key_exists保险些

  is_array(‘value‘,$arr); =>判断数组中是否有该值

  array_flip($arr); =>将数组中的键与值对调

  range(开始,结束); =>生成一个指定范围的数组

  array_sum($arr); =>计算数组中所有单元值的和

  shuffle($arr); =>打乱数组中单元值的顺序,返回bool值,可用print_r进行输出

  array_unique($arr); =>去除数组中重复的单元值,不改变键名

  array_reverse($arr,[true]); =>将数组中的单元值倒序

  sort($arr); =>为数组中的单元值进行从小到大的排序

  默认不影响数字索引,增加true才可倒序数字索引

  关于队列和栈:队列即先进先出 而栈即后进先出

  array_push($arr,‘新单元‘); =>往数组尾部追加单元,并返回单元数量

  array_pop($arr); =>输出数组尾部单元,并将其从数组中删除

  array_unshift($arr,‘新单元‘) =>往数组头部追加单元,并返回单元数量

  array_shift($arr); =>输出数组头部单元,并将其从数组中删除

  若为数字索引,则由0重新计数

作者:@zhnoah
出处:http://www.cnblogs.com/zhnoah/
本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 
接,否则保留追究法律责任的权利。

时间: 2024-10-10 05:22:16

PHP学习笔记——7.数组的相关文章

C和指针 学习笔记-3.数组与指针

数据名代表首地址 指向数组的指针 #include <stdio.h> extern void iterate(int *p); void main(){ int a[]={1,2,3,4,5}; iterate(a); } void iterate(int *p){ int i; for(i=0;i<5;i++){ printf("%d",*p++); } } 指向一维数组的指针 int (*p)[3] #include <stdio.h> void i

Swift学习笔记(12)--数组和字典的复制

Swift中,数组Array和字典Dictionary是用结构来实现的,但是数组与字典和其它结构在进行赋值或者作为参数传递给函数的时候有一些不同. 并且数组和字典的这些操作,又与Foundation中的NSArray和NSDictionary不同,它们是用类来实现的. 注意:下面的小节将会介绍数组,字典,字符串等的复制操作.这些复制操作看起来都已经发生,但是Swift只会在确实需要复制的时候才会完整复制,从而达到最优的性能. 字典的赋值和复制操作 每次将一个字典Dictionary类型赋值给一个

Swift学习笔记(5)--数组

数组的下标从0开始计数,相关方法属性涉及到下标时也从0开始计数 1.定义: //1.可变数组 var cityArray = ["Portland","San Francisco","Cupertino"] //2.不可变数组 let cityArray2 = ["Portland","San Francisco","Beijing"] //3.空数组 var animalArray =

JavaScript学习笔记:数组reduce()和reduceRight()方法

很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: var arr = [1,2,3,4,5,6]; Array.prototype.sum = function (){ var sumResult = 0; for (var i = 0; i < this.length; i++) { sumResult += parseInt(this[i]);

es6学习笔记(2)数组(中)

接着上一篇,给大家再分享一些数组的其他方法.大家也可以去点击这里学习数组更多的方法 concat方法: 概述:    concat() 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回. 参数: valueN:需要与原数组合并的数组或非数组值. 描述: concat 方法将创建一个新的数组,然后将调用它的对象(this 指向的对象)中的元素以及所有参数中的数组类型的参数中的元素以及非数组类型的参数本身按照顺序放入这个新数组,并返回该数组. concat方法并不修改调用它的对象(th

JavaScript新手学习笔记1——数组

今天,我复习了一下JavaScript的数组相关的知识,总结一下数组的API: 总共有11个API:按照学习的先后顺序来吧,分别是: ① toString()  语法:arr.toString(); 将数组转化为字符串,并且返回这个字符串,以逗号分隔:但是不改变原数组: 1 var arr=[1,2,3,4,5]; 2 var result=arr.toString(); 3 console.log(result); //1,2,3,4,5 4 console.log(arr); //[1,2,

数据结构学习笔记&mdash;&mdash;顺序数组1

线性表最简单的刚开始就是顺序存储结构,我是看着郝斌的视频一点一点来的,严蔚敏的书只有算法,没有具体实现,此笔记是具体的实现 为什么数据结构有ADT呢,就是为了满足数据结构的泛性,可以在多种数据类型使用 这里所说的数组并不是简单那种数组,这里所讲的是数组结构,就是在内存中是连续存储的,所以要先构造出一个这样的结构 typedef int ElemType; typedef struct { ElemType* elem; //数组结构中的数据区,可以是任何数据类型,常见的是结构体类型 int le

学习笔记----后缀数组

学习资料:IOI2009国家集训队论文--<后缀数组> 论文里面写的比较清晰了,但是代码里面没有解释,又从网上找到了一份代码的注释,解释的挺好的 地址:http://www.cnblogs.com/Lyush/p/3233573.html 这里是代码模板: 倍增算法实现的,效率很高. const int maxn = 10010; int wa[maxn], wb[maxn], wv[maxn], ws1[maxn]; int cmp(int *r, int a, int b, int l)

Java学习笔记:数组

package myjava; /**  * 数组  * @author Administrator  *  */ import java.util.*; public class Myarray { public static void main(String args[]) { // 数组排序 int array[] = { 1, 9, 4, 2, 8, 6, 7 }; Arrays.sort(array); // 数组输出 for (int item : array) { System.o

[前端JS学习笔记]JavaScript 数组

一.JavaScript数组的奇葩 大多数语言会要求数组的元素是同个类型, 但是JavaScript允许数组元素为多种类型. var arr = ["羽毛球", 666, {"json:":"666"}]; console.log(arr.length); 二.JavaScript 数组的两种声明 1.var arr = [元素]; var arr = ["坚持"]; 2.new Array(); 或者 var arr2 =