零起点php入门第13课-php数组(2)

Author: 陌小雨Date: 2016-09-18View: 65

零起点php入门教程陌小雨博客很久没有更新了,一个人作战确实很辛苦,又要搜集资料、又要测试、保证把实用、可用的分享给大家,让大家学的时候不至于突然卡到一个小问题就一头雾水,所以虽然慢点,还是要保证质量吧,忘大家理解。

这是零起点php入门第13课,这节课我们来讲讲php数组的常用操作。主要包括遍历、比较、合并、分割、排序和过滤数组元素。在学习这些知识之前我们首先需要认识三个函数count、print_r和var_dump,他们的原型如下所示:

int count ( mixed $var [, int $mode ] )	
bool print_r ( mixed $expression [, bool $return ] )
void var_dump ( mixed $expression [, mixed $expression [, $... ]] )

函数说明:
count函数用来计算数组中元素的个数或者对象中属性的个数,这里我们只用来计算数组元素的个数。
print_r函数用来打印变量的详细信息。
var_dump函数用来打印一个或多个表达式的结构信息,包括表达式的类型与值。

1、for循环遍历数组

遍历数组即依次对数组中的每个元素进行访问且仅访问一次。我们知道默认数组的索引值是从0开始递增的,而且可以将变量作为索引来访问数组的元素。因此,我们完全可以使用循环递增一个作为索引的变量来遍历一个数组。

<?php
	$arr=array(63,'abc',45,'hello',3,7,9,'DEF');		//定义一个索引数组
	echo '在数组$arr中:<br />';
	for($i=0;$i<count($arr);$i++){		//将循环控制变量作为访问数组的下标
		echo "第{$i}个元素:{$arr[$i]}<br />";		//输出数组元素
	}
?>

2、合并数组

合并数组即为将两个或者多个数组合并为一个数组。合并数组有对应的运算符和多个函数可以完成,他们的区别就在于使用不同的规则对数组进行合并。

2.1、使用联合运算符合并数组

PHP中有专门的数组运算符,用来合并数组的运算符称为联合运算符,它的符号与加法的符号相同。使用的形式如下:

$arr = $arr1 + $arr2

它会将右操作数中与左操作数中相同索引的元素去除后将剩余元素加在左操作数后而不会发生覆盖。

<?php
	$arr1=array('a','b','c');		//定义一个数组
	echo '数组$arr1的信息:<br />';
	print_r($arr1);		//输出数组信息
	$arr2=array('d','e','f','g');		//定义一个数组
	echo '<br />数组$arr2的信息:<br />';
	print_r($arr2);		//输出数组信息
	$arr=$arr1+$arr2;		//联合数组
	echo '<br />联合后的数组$arr的信息:<br />';
	print_r($arr);		//输出联合后的数组信息
?>

上面代码运行结果为:

数组$arr1的信息:
Array ( [0] => a [1] => b [2] => c )
数组$arr2的信息:
Array ( [0] => d [1] => e [2] => f [3] => g )
联合后的数组$arr的信息:
Array ( [0] => a [1] => b [2] => c [3] => g )

2.2、使用系统函数合并数组

基本的合并数组函数是array_merge函数,它可以将一个或者多个数组合并起来,将后一个数组的元素加在前一个数组的末尾。它的函数原型如下:

array array_merge ( array $array1 [, array $array2 [, array $... ]] )

参数array1、array2…为将要合并的数组,该函数的特点是可以一次合并多个数组。

<?php
	$arr1=array('a','b','c');		//定义一个数组
	echo '数组$arr1的信息:<br />';
	print_r($arr1);		//输出数组信息
	$arr2=array('d','e','f','g');		//定义一个数组
	echo '<br />数组$arr2的信息:<br />';
	print_r($arr2);		//输出数组信息
	$arr3=array('e','g','h');		//定义一个数组
	echo '<br />数组$arr3的信息:<br />';
	print_r($arr3);		//输出数组信息
	$arr=array_merge($arr1,$arr2);		//合并2个数组
	echo '<br />合并$arr1和$arr2后的数组$arr信息:<br />';
	print_r($arr);		//输出联合后的数组信息
	$arr=array_merge($arr1,$arr2,$arr3);		//合并3个数组
	echo '<br />合并$arr1、$arr2和$arr3后的数组$arr信息:<br />';
	print_r($arr);		//输出联合后的数组信息
?>

上面代码运行结果为:

数组$arr1的信息:
Array ( [0] => a [1] => b [2] => c )
数组$arr2的信息:
Array ( [0] => d [1] => e [2] => f [3] => g )
数组$arr3的信息:
Array ( [0] => e [1] => g [2] => h )
合并$arr1和$arr2后的数组$arr信息:
Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g )
合并$arr1、$arr2和$arr3后的数组$arr信息:
Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => e [8] => g [9] => h )

3、获取数组的交集和差集

获取数组的交集即为获取指定数组与其他数组中相同的元素;获取数组的差集即为获取指定数组与其他数组中不同的元素。在PHP中提供了获取交集和差集的多个函数,这里只讲解最主要的两个,他们的函数原型如下:

array array_intersect ( array $array1 , array $array2 [, array $ ... ] )  //获取数组的交集

array array_diff ( array $array1 , array $array2 [, array $ ... ] )  //获取数组的差集

这两个函数均可接受多个参数,而且均会返回函数中参数array1与其他数组的交集(差集)。这里我们也可借用数学中的题目来学习这个函数。

例如有两个数组$arr1和$arr2用来保存两组参加知识竞赛学生的学号。前提是一个学生可以参加多项竞赛,那么我们就可以用以上函数来取得两项竞赛都参加的学生(交集),同样也可以取得一组中只参加一项竞赛的学生。

<?php
	$arr1=array(1,3,4,5,34,78,99);		//参加第一项竞赛的学生学号数组
	$arr2=array(5,6,7,3,56,34,8,9);		//参加第二项竞赛的学生学号数组
	$arr=array_intersect($arr1,$arr2);		//获取两个数组的交集
	echo '两项竞赛均参加的学生学号有:<br />';
	print_r($arr);		//输出数组的详细信息
	$arr=array_diff($arr1,$arr2);		//获取相对数组$arr1的差集
	echo '<br />$arr1中只参加一项竞赛的学生学号有:<br />';
	print_r($arr);		//输出数组的详细信息
	$arr=array_diff($arr2,$arr1);		//获取相对数组$arr2的差集
	echo '<br />$arr2中只参加一项竞赛的学生学号有:<br />';
	print_r($arr);		//输出数组的详细信息
?>

上面代码运行结果为:

两项竞赛均参加的学生学号有:
Array ( [1] => 3 [3] => 5 [4] => 34 )
$arr1中只参加一项竞赛的学生学号有:
Array ( [0] => 1 [2] => 4 [5] => 78 [6] => 99 )
$arr2中只参加一项竞赛的学生学号有:
Array ( [1] => 6 [2] => 7 [4] => 56 [6] => 8 [7] => 9 )

与数学中只能获取数值的交集与差集不同的是,PHP中可以使用以上两个函数来获取其他类型元素的交集和差集。

<?php
	$arr1=array('A','B','C','D','E');		//定义两个数组
	$arr2=array(1,'A',2,'B',3,'C');
	$arr=array_intersect($arr1,$arr2);		//获取数组的交集
	echo '数组$arr1和数组$arr2的交集是:<br />';
	print_r($arr);
	$arr=array_diff($arr1,$arr2);		//获取$arr1与$arr2的差集
	echo '<br />数组$arr1和数组$arr2的差集是:<br />';
	print_r($arr);
	$arr=array_diff($arr2,$arr1);		//获取$arr2与$arr1的差集
	echo '<br />数组$arr2和数组$arr1的差集是:<br />';
	print_r($arr);
?>

上面代码运行结果为:

数组$arr1和数组$arr2的交集是:
Array ( [0] => A [1] => B [2] => C )
数组$arr1和数组$arr2的差集是:
Array ( [3] => D [4] => E )
数组$arr2和数组$arr1的差集是:
Array ( [0] => 1 [2] => 2 [4] => 3 )

使用array_intersect函数和array_diff函数获取多个数组的交集和差集的使用与获取两个数组的交集和差集类似,这里陌小雨就不再详细讲解。