PHP第七篇——数组篇

什么是数组?数组就是被命名的用来存储一系列数值的地方。数组array是非常重要的数据类型。相对于其他的数据类型,它更像是一种结构,而这种结果构可以存储一系列数值。数组能够在单一变量名中存储许多值,并且能够通过引用下标号来访问某个值。

在 PHP 中,有三种数组类型:

索引数组 - 带有数字索引的数组
关联数组 - 带有指定键的数组
多维数组 - 包含一个或多个数组的数组

数组篇

PHP数组定义

数组就是一个键值对组成的语言结构,键类似于酒店的房间号,值类似于酒店房间里存储的东西。

其实在PHP中数组感觉更像iOS中的字典,但也有iOS中的数组相似点,只是数组通过索引,字典是通过键值对。

创建数组(空)

$arr = array();

PHP有两种数组:索引数组、关联数组。

索引和关联两个词都是针对数组的键而言的。

PHP索引数组–iOS中的数组

先介绍下索引数组,索引数组是指数组的键是整数的数组,并且键的整数顺序是从0开始,依次类推。

创建索引数组

$arrIndex = array("iCocos", "iOS", "苹果");

注意数组的键是从0开始的。可以使用print_r($arr);语句输出数组键及对应的值。

赋值方式

第一种:用数组变量的名字后面跟一个中括号的方式赋值,当然,索引数组中,中括号内的键一定是整数。比如,$arr[0]='iCocos';

第二种:用array()创建一个空数组,使用=>符号来分隔键和值,左侧表示键,右侧表示值。当然,索引数组中,键一定是整数。比如,array('0'=>'iCocos');

第三种:用array()创建一个空数组,直接在数组里用英文的单引号'或者英文的双引号"赋值,数组会默认建立从0开始的整数的键。比如array('iCocos');这个数组相当于array('0'=>'iCocos');

读取内容

用数组变量的名字后跟的中括号中的键,来访问数组中的值。

$arr = array('iCocos','iOS');
$arr0 = $arr['0'];
print_r($arr0);//结果为iCocos

遍历数组(开发中最常用的操作)–>for

$arr=array('iCocos','iOS','苹果');
for($i=0; $i<3; $i++){
echo '<br>数组第'.$i.'值是:'.$arr[$i];
}

遍历数组(开发中最常用的操作)–>foreach

$arr=array('iCocos','iOS','苹果');
foreach($arr as $k=>$v){
echo '<br>第'.$k.'值是:'.$v;
}

PHP关联数组–iOS中的字典

关联数组是指数组的键是字符串的数组。

创建关联数组

$arr = array(
'apple'=>"iCocos",
'banana'=>"iOS",
'pineapple'=>"苹果"
); 

赋值方式

第一种:用数组变量的名字后面跟一个中括号的方式赋值,当然,关联数组中,中括号内的键一定是字符串。比如,$arr['apple']='iCocos';

第二种:用array()创建一个空数组,使用=>符号来分隔键和值,左侧表示键,右侧表示值。当然,关联数组中,键一定是字符串。比如,array('apple'=>'iCocos');

读取内容

用数组变量的名字后跟中括号+键的方式来访问数组中的值,键使用单引号或者双引号括起来。

$arr = array('apple'=>"iCocos",'banana'=>"iOS",'pineapple'=>"苹果"); 
$arr0 = $arr['banana'];
print_r($arr0);

遍历数组(开发中最常用的操作)–>foreach

$arr=array('apple'=>"iCocos",'banana'=>"iOS",'pineapple'=>"苹果");
foreach($arr as $k=>$v){
echo '<br>水果的英文键名:'.$k.',对应的值是:'.$v;
}

常用函数

array_filter(*array*,*callbackfunction*); 
array_intersect_uassoc(*array1*,*array2*,*array3*...,*myfunction*) 
array_intersect_ukey(*array1*,*array2*,*array3*...,*myfunction*) 
array_reduce(*array*,*myfunction*,*initial*) 
array_walk(*array*,*myfunction*,*userdata*...) 
……

其他常用技巧总结

多维数组

array(array(),array()) 二维数组

数组长度

$arr = array("百度","阿里","腾讯"); 
echo count($arr); 

增加删除数组的元素

在数组元素的尾部增加

array_push(array,value1,value2…) 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。
该函数等于多次调用 $array[] = $value。

<?php
$arr = array("百度","阿里","腾讯");
array_push($arr,"知乎","微博");
echo "<pre>"; //换行显示
print_r($arr);
打印结果显示:
Array
(
[0] => 百度
[1] => 阿里
[2] => 腾讯
[3] => 知乎
[4] => 微博
)

在数组元素的开始增加

array_unshift(array,value1,value2,value3…) 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。

<?php
$arr = array("百度","阿里","腾讯");
array_unshift($arr,"知乎","微博");
echo "<pre>"; //换行显示
print_r($arr);
打印结果显示:
Array
(
[0] => 知乎
[1] => 微博
[2] => 百度
[3] => 阿里
[4] => 腾讯
)

在数组元素的尾部删除

array_pop(array) 函数删除数组中的最后一个元素。

<?php
$arr = array("百度","阿里","腾讯");
array_pop($arr);
echo "<pre>"; //换行显示
print_r($arr);
打印结果显示:
Array
(
[0] => 百度
[1] => 阿里
)

在数组元素的开始删除

array_shift(array) 函数删除数组中第一个元素 并可以返回被删除元素的值。

<?php
$arr = array("百度","阿里","腾讯");
array_shift($arr);
echo "<pre>"; //换行显示
print_r($arr);
打印结果显示:
Array
(
[0] => 阿里
[1] => 腾讯
)

移除数组中重复的值

array_unique(array) 函数移除数组中的重复的值,并返回结果数组。

<?php
$arr = array("百度","阿里","腾讯","百度","微博");
$data = array_unique($arr);
echo "<pre>";
print_r($data);
打印结果显示:
Array
(
[0] => 百度
[1] => 阿里
[2] => 腾讯
[4] => 微博
)

数组合并、拆分、比较

array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次追加。

<?php
$arr1 = array("百度","阿里","腾讯");
$arr2 = array("知乎","微博");
$data = array_merge($arr1,$arr2);
echo "<pre>";
print_r($data);
打印结果显示:
Array
(
[0] => 百度
[1] => 阿里
[2] => 腾讯
[3] => 知乎
[4] => 微博
)

递归追加数组

array_merge_recursive()函数与array_merge()相同,可以将两个或多个数组合并到一起,形成一个联合的数组。两者之间的区别在于,当某个输入数组中的某个键已经存在于结果数组中时该函数会采取不同的处理方法。array_merge()会覆盖前面存在的键/值对,将其替换为当前输入数组中的键/值对,而array_merge_recursive()将两个值合并在一起,形成一个新的数组并以原有的键作为数组名。其形式为:

$arr= array('one'=>'C', 'one'=>'B'); 
$arr1= array('three'=>'1', 'one'=>'2'); 
$arr2= array_merge_recursive($arr, $arr1); 
echo "<pre>";
print_r($arr2); 
打印结果显示:
Array
(
[one] => Array
(
[0] => B
[1] => 2
)

[three] => 1
)

合并两个数组

array_combine()函数会生成一个新数组,这个数组由一组提交的键和对应的值组成,其形式为:

$arr= array('A', 'B'); 
$arr1= array('1', '2'); 
$arr2= array_combine($arr, $arr1);
echo "<pre>";
print_r($arr2); 
打印结果显示:
Array
(
[A] => 1
[B] => 2
)

求数组的交集

array_intersect()函数返回一个保留了键的数组,这个数组只由第一个数组中出现的且在其他每个输入数组中都出现的值组成。其形式如下:

$arr= array('A', 'B', 'C', 'D'); 
$arr1= array('A', 'B', 'E'); 
$arr2= array('A', 'F', 'D'); 
$arr3= array_intersect($arr, $arr1, $arr2); 
echo "<pre>";
print_r($arr3); 
打印结果显示:
Array
(
[0] => A
)

注意:只有在两个元素有相同的数据类型时,array_intersect()才会认为它们相等。

求关联数组的交集

array_intersect_assoc()与array_intersect()基本相同,只不过它在比较中还考虑了数组的键。因此,只有在第一个数组中出现,且在所有其他输入数组中也出现的键/值对才被返回到结果数组中。其形式如下:

$arr= array('a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D'); 
$arr1= array('a'=>'A', 'c'=>'B', 'E'); 
$arr2= array('a'=>'A', 'b'=>'F', 'd'=>'B'); 
$arr3= array_intersect_assoc($arr, $arr1, $arr2); 
echo "<pre>";
print_r($arr3); 
打印结果显示:
Array
(
[a] => A
)

求关联数组的差集

函数array_diff_assoc()与array_diff()基本相同,只是它在比较时还考虑了数组的键,因此,只在第一个数组中出现而不在其他输入数组中出现的键/值对才会被返回到结果数组中。其形式如下:

$arr= array('a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D'); 
$arr1= array('a'=>'A', 'b'=>'B', 'e'=>'E'); 
$arr3= array_diff_assoc($arr, $arr1); 
echo "<pre>";
print_r($arr3); 
打印结果显示:
Array
(
[c] => C
[d] => D
)

其他有用的数组函数

返回一组随机的键 array_rand()函数将返回数组中的一个或多个键。其形式为:

$arr= array('a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D'); 
$arr1= array_rand($arr, 2); 
echo "<pre>";
print_r($arr1);
打印结果显示:
Array
(
[0] => c
[1] => d
) //每次刷新显示的结果都不一样

对数组中的值求和

array_sum()函数将数组内的所有值加在一起,返回最终的和,其形式如下:

$arr= array('A', 32, 12, 'B'); 
$count= array_sum($arr); 
echo "<pre>";
print_r($count); 
打印结果显示:
44

如果数组中包含其他数据类型(例如字符串),这些值将被忽略。

划分数组

array_chunk()函数将数组分解为一个多维数组,这个多维数组由多个包含size个元素的数组所组成。其形式如下:

$arr= array('A', 'B', 'C', 'D'); 
$arr1= array_chunk($arr, 2); 
echo "<pre>";
print_r($arr1); 
打印结果显示:
Array
(
[0] => Array
(
[0] => A
[1] => B
)

[1] => Array
(
[0] => C
[1] => D
)

)
坚持原创技术分享,您的支持将鼓励我继续创作!