数组是php中的重要数据类型之一,是复合类型。数组的集合,在php中数组是一个有序映射
索引数组:数组的下标是数字
关联数组:数组的下标是字符
注:php中数组其实是不区分索引还是关联数组,都是根据键名找键值。
一、通过 array() 形式创建
$arr = array();
$arr1 = array(1,‘dkf‘,45); //索引数组
$arr2 = array(‘first‘ => ‘first_value‘ , 4 => ‘secend_value‘); //关联数组 + 索引 = 混合
二、通过 [ ] 形式创建
$arr = []; $arr[] = ‘haha‘;
$arr[] = 234;
$arr[‘haha‘] = ‘haha‘;
$arr1 = [‘asd‘,‘df‘,34]; //索引数组 $arr2 = [ ‘user‘ => ‘zhang‘, ‘haha‘ => ‘haha‘ ];
三、通过 range() 和 compact() 创建
range() //快速创建索引数组 $arr = range(3,13); //创建数组,值从3开始,一直到13结束 $arr1 = range(3,13,2); //第三个参数是步长,原来每次加1,现在每次加2 $arr2 = range(‘a‘,‘z‘);
compact() //快速将变量转换为数组,针对已有变量
$username = ‘zhang‘;
$email = ‘234@163.com‘;
$age = 18;
$arr = compact(‘username‘,‘email‘,‘age‘); //字符串里面为变量名
四、通过 define() 定义常量数组
const定义数组 const ARR = array(1,23,4); const ARR2 = [1,2,3]; define定义数组 define(‘ARR3‘ , [2,3,4,5]); define(‘ARR4‘ , array(2,3,4));
var_dump($arr); //返回类型及数据 echo gettype($arr); //返回类型名称 var_dump(is_array($arr));//返回boolean
//数组里面包含数组就是二维数组。数组+数组+数组 = 三维数组 ...... $arr = array( //索引包索引 array(1,2,3), array(4,5,6) ); $arr1 = array( //索引包关联 array(‘name‘ = ‘haha‘,‘age‘ = 18), array(‘name‘ = ‘haha‘,‘age‘ = 18) ); $arr2 = array( //关联包索引 ‘users‘ => array(1,2,3), ‘ages‘ => array(4,5,6) ); $arr3 = array( //关联包关联 ‘users‘ => array(‘username‘ => ‘haha‘), ‘ages‘ => array(‘age‘ => 15) );
//同样可以用 [] 来创建
查
$arr = [2,3,4,2,4]; echo $arr[2]; //数组下标为2的值 $arr1 = [‘name‘ => ‘haha‘ , ‘age‘ => 18]; echo $arr1[‘name‘]; //输出数组索引为name的值
$arr2 = [12 , [‘name‘=>‘qiu‘ , ‘age‘=>18]]
echo $arr2[1][‘name‘];
echo $arr2[1]{‘name‘}; //可以使用花括号,效果一样
增
$arr = [1,2]; $arr[] = 3; $arr[‘name‘] = ‘qiu‘;
改
$arr = [1,2,2,2]; $arr[0] = 2;
删
$arr = [1,2,3,4,‘name‘=>‘qiu‘]; unset($arr[‘name‘]); unset($arr[0]);
+ //合并数组
$arr1 = [1,2]; $arr2 = [3,4]; $new_arr= $arr1 + $arr2; //若索引相同,只回采用+号左边的,并不会覆盖。所以结果还是 [1,2]
$arr3 = $arr1 +[‘name‘=>‘haha‘,‘age‘=>19]; //这样就会合并起来
== //判断数组是否相同,顺序可以错乱,还会进行类型转换
$a = [‘45‘ => 234]; $b = [45 => ‘234‘]; var_dump($a == $b); //true
=== //判断数组是否相同,顺序要相同,类型也必须相同
$a = [‘45‘ => 234]; $b = [45 => ‘234‘]; var_dump($a == $b); //false
!= 是 == 的取反
!== 是 === 的取反
//临时转换 $a = 123; $arr1 = (array)$a; $b = ‘haha‘; $arr2 = (array)$b; $c = null; $arr3 = (array)$arr3; //这里会转为空数组 //永久转换 settype($a , ‘array‘); settype($b , ‘‘array); settype($c , ‘array‘); //这里也是空数组,转换规则跟临时转换一样
count //数组个数 $arr = [1,2,3,4]; echo count($arr); //4 echo count(‘123‘); //若传的是字符串,返回的是1 echo count(null); //若传的是null,返回的是0
foreach只能遍历数组或对象,否则会报错
foreach遍历一维数组
$arr = [1,2,3,4,5,6]; foreach($arr as $v){ echo $y; //这里遍历出的是键值 } foreach($arr as $k => $v){ echo $k,$v; //这里输出的是键名 和 键值 }
foreach遍历二维数组
$arr = [[1,2,3] , [,4,5,6]]; foreach($arr as $v){ foreach($v as $val){ echo $val; } }
可以通过 : 和 endforeach 代替 { }
$arr = [1,2,3,4]; foreach($arr as $v): echo $v; endforeach;
//数组默认指针,指向第一个元素 key($arr) //得到当前指针所在的键名,没有则返回 null current($arr) //得到当前指针所在的键值,没有则返回false next($arr) //指针往下移动一位,并得到该位置的值,没有则返回false prev($arr) //指针往上移动一位,并得到该位置的值,没有则返回false
reset($arr) //指针移动到数组开始,并返回当前位置的值,没有则返回false
end($arr) //指针移动到数组末尾,并返回当前位置的值,没有则返回false
$arr = [ ‘‘ => ‘a‘, ‘a‘=>‘b‘, null=>‘c‘ ]; //根据key来遍历数组 while(!is_null($arr)){ echo ‘当前键名‘.key($arr).‘ 当前键值‘.current($arr); next($arr); //将指针往后移动一位 } //不能根据current来遍历,因为当键值存在0或false之类就会退出循环 //实用场景,获取文件扩展名 $file_name = ‘haha.php‘; $res = explode(‘.‘ , $file_name); $ext = end($res);
list //把数组中的值赋给一些变量 $arr = [1,2,3]; list(,$b,) = $arr; //这样 $b 就得到了2 list($a,,$c) = $arr; //这样 $a,$c 就得到了1,3 echo $a,$b,$c; //实用场景 $arr = [ [1,2,3],[4,5,6],[7,8,9] ]; foreach($arr as list($a,$b,$c)){ echo $a,$b,$c; }
each //返回数组当前指针的键值对数组,并将数组指针往前移动一步 //键值对数组:0为键,1为值,key为键,value为值。 一共4项 $arr = [1,2,3]; print_r(each($arr)); //打印出第一项的数组
$arr = [1,2,3]; while(list($k,$v) = each($arr)){ echo $k,$v; }
原文:https://www.cnblogs.com/mingliangge/p/13620455.html