^ 回到顶部
  • 人生没有定律,每个人都有自己的节奏
  • 若文中代码有问题,可能是少了几个问号,留言一定会解决!
  • 希望你的坚持,都是因为热爱,而不是因为不甘心
  • 站点文章结尾新增了赞赏通道
  • 那些不愿意让你吃亏的人,才是真正值得你深交的人,也是值得你付出时间的人

零起点php入门第16课-php数组(5)

接下来我们继续学习零起点 php 入门第 16 课,这节课陌小雨和大家一起来学习关联数组。

我们知道 PHP 的数组索引也是可以自定义的,它允许的类型为整型和字符串形,这种使用自定义键名的数组就称为关联数组。关联数组的极大多数使用方法同索引数组是相同的,因此本节课主要学习定义关联数组、数组的比较运算符和遍历数组的其他一些方式。

定义关联数组即为数组显式地指定索引名,指定的方式非常简单,通常的形式如下:

array(索引=>值…)

关联数组中同样可以有不显式指定索引的元素,被省略的索引按照索引数组的指定规则进行指定,我们可以通过一个示例来演示。™

<?php
	$arr=array('name'=>'PHP','age'=>22,7=>25,33,21=>35,56);		//定义一个关联数组
	echo '数组$arr 的元素个数为:'.count($arr);		//输出关联数组的元素个数
	echo '<br />该数组的详细信息为:<br />';
	print_r($arr);		//输出数组的详细信息
?>

上述代码运行结果为:

数组$arr 的元素个数为:6
该数组的详细信息为:
Array ( [name] => PHP [age] => 22 [7] => 25 [8] => 33 [21] => 35 [22] => 56 )

在上述例子中,需要小伙伴们注意的就是数组的索引值的变化规律,还有就是数组元素的个数并不会因为数组指定了 21 作为索引而使得数组的长度变为 21

1、数组比较运算符

PHP 中提供了专门用于对数组进行比较的运算符,如下图所示。

零起点 php 入门第 16 课-php 数组(5)

上图中的相等(==)和全等(===)运算符,这两个运算符的区别就在于元素的顺序以及元素的类型。如下所示的两个数组:

$arra=array('hello','hi')

$arrb=array(1=>'hi',0=>'hello')

数组$arra 与数组$arrb 相等但不全等,不全等是因为他们的索引/值顺序不同。再来看两个数组:

$arrc=array(1,2)

$arrd=array('1',2);

数组$arrc 与数组$arrd 同样相等但不全等,不全等是因为元素的类型不同。不等和不全等运算符的使用方法正好和他们相反,这里就不再赘述。

<?php
	$arra=array('hello','hi');			//定义多个数组
	$arrb=array(1=>'hi',0=>'hello');
	$arrc=array(1,2);
	$arrd=array('1',2);
	echo '$arra:';
	print_r($arra);			//输出各个数组的信息以便读者对照
	echo '<br />$arrb:';
	print_r($arrb);
	echo '<br />$arrc:';
	print_r($arrc);
	echo '<br />$arrd:';
	print_r($arrd);
	echo '<br />$arra==$arrb:'.($arra==$arrb);			//对数组进行比较运算并输出计算结果
	echo '<br />$arra===$arrb:'.($arra===$arrb);
	echo '<br />$arrc==$arrd:'.($arrc==$arrd);
	echo '<br />$arrc===$arrd:'.($arrc===$arrd);
	echo '<br />$arra!=$arrc:'.($arra!=$arrc);
	echo '<br />$arrb<>$arrd:'.($arrb<>$arrd);
?>

上述代码运行结果为:

$arra:Array ( [0] => hello [1] => hi )
$arrb:Array ( [1] => hi [0] => hello )
$arrc:Array ( [0] => 1 [1] => 2 )
$arrd:Array ( [0] => 1 [1] => 2 )
$arra==$arrb:1
$arra===$arrb:
$arrc==$arrd:1
$arrc===$arrd:
$arra!=$arrc:1
$arrb<>$arrd:1

2、使用 foreach 结构遍历数组

前面的课程我们已经使用过 for 循环来遍历索引数组。然而关联数组的索引值通常是自定义的,因此通常不能通过 for 循环来遍历。foreach 是 PHP 中专门用来遍历数组的结构,它有两种使用形式,如下所示:

foreach (array_expression as $value)

statement

foreach (array_expression as $key => $value)

statement

第一种形式中的参数 array_expression 表示要进行遍历的数组;参数$value 用来接收当前元素的值。

第二种形式是第一种形式的补充,除了使用参数$value 来接收当前元素的值外,还使用参数$key 来接收当前元素的键值。foreach 结构的工作原理是每次循环都会访问下一个数组元素。

数组指针是数组内部特有的指针,它初始会指向数组的第一个元素,可以通过数组指针操作函数来对指针进行操作。由于foreach 控制的是数组的指针,因此可以遍历任意数组。

<?php
	$arr=array(63,'abc',45,'hello',3,7,9,'DEF');		//定义一个索引数组
	echo '遍历一个索引数组:<br />';
	foreach($arr as $v)			//使用 foreach 遍历数组
		echo "{$v}  ";
	$arra=array('a'=>17,'B'=>'hello',123,'def','III'=>3);		//定义一个关联数组
	echo '<br />遍历一个关联数组:<br />';
	foreach($arra as $k=>$v)		//使用 foreach 遍历数组
		echo "{$k}=>{$v}<br />";
?>

上述代码运行结果为:

遍历一个索引数组:
63 abc 45 hello 3 7 9 DEF
遍历一个关联数组:
a=>17
B=>hello
0=>123
1=>def
III=>3

从运行结果我们可以看到,使用 foreach 可以轻松完成遍历一个索引数组。当然 foreach 不止可以用来输出数组元素,下面我们就来演示使用 foreach 修改数组中元素的值。由于 foreach 默认是使用传值赋值,因此我们可以以引用的形式来访问元素并修改其值。

<?php
	$arr=array('I'=>1,'II'=>2,'III'=>3,'IV'=>4,'V'=>5);		//定义一个数组
	echo '修改之前数组信息:<br />';
	print_r($arr);		//输出修改之前数组信息
	foreach($arr as &$v)
		$v=$v*2+1;		//使用遍历修改数组的值
	echo '<br />修改之后数组信息:<br />';
	print_r($arr);		//输出修改之后数组信息
?>

上述代码运行结果为:

修改之前数组信息:
Array ( [I] => 1 [II] => 2 [III] => 3 [IV] => 4 [V] => 5 )
修改之后数组信息:
Array ( [I] => 3 [II] => 5 [III] => 7 [IV] => 9 [V] => 11 )

从运行结果我们可以看到,使用 foreach 成功修改了原数组的元素值。

foreach 结构就是通过控制数组指针来遍历一个数组的。除此之外,PHP 中专门提供了多个指针控制函数,使用指针控制函数可以更加灵活地对数组进行操作。我们首先来介绍这些控制函数,然后再使用这些函数进行遍历数组以及进行其他的操作。

3、each()和 list()

each 函数返回数组中当前的索引/值对并将数组指针向前移动一步,该函数的形式如下:

array each ( array &$array )

该函数会返回一个含有四个元素的数组,形式如下所示:

Array ( [1] =>值 [value] =>值 [0] => 索引 [key] => 索引)

该函数当数组指针移出数组时会返回 FALSE。

<?php
	$arr=array(1,2,'III'=>3,'IV'=>4);		//定义一个数组
	for($i=0;$i<count($arr);$i++){
		print_r(each($arr));		//循环输出数组的索引/值对
		echo '<br />';
	}
?>

上述代码运行结果为:

Array ( [1] => 1 [value] => 1 [0] => 0 [key] => 0 )
Array ( [1] => 2 [value] => 2 [0] => 1 [key] => 1 )
Array ( [1] => 3 [value] => 3 [0] => III [key] => III )
Array ( [1] => 4 [value] => 4 [0] => IV [key] => IV )

以上代码之所以可以通过一个简单的循环来输出对应元素的索引/值对,是由于每次调用 each 函数均会向前移动指针。

list 函数用来把数组中的值赋给一些变量

array list ( mixed $varname [, mixed $... ] )

函数中的参数 varname 用来接收数组对应的元素而且只能接收键为数字的元素即 list 的第一个参数会接收数组中最小键值对应的值。

<?php
	$arr=array(1,2,'III'=>3,'IV'=>4);		//定义一个数组
	list($k,$v)=each($arr);		//使用 list 函数接受 each 函数返回的值
	echo "{$k}=>{$v}";		//输出变量 k 和 v 的值
?>

上述代码运行结果为:

0=>1

运行结果中输出的是数组$arr 的第一个元素的索引/值对。因此我们就可以通过循环来依次输出数组的键值对。接下来我们试试用 while 循环联合 list 和 each 函数遍历数组。

<?php
	$arr=array(1,2,'III'=>3,'IV'=>4);		//定义一个数组
	while(list($k,$v)=each($arr)){		//使用 each 函数返回 FALSE 的特性作为判断条件
		echo "{$k}=>{$v}<br />";		//输出数组的索引/值对
	}
?>

上述代码运行结果为:

0=>1
1=>2
III=>3
IV=>4

从运行结果我们可以看到成功遍历输出了数组的索引/值对,当然也可以使用 for 循环来遍历,这里就不再详细讲解,小伙伴们可以自己尝试写在评论下方哈(用 pre 标签包裹代码)。

4、数组指针控制函数

PHP 中提供了多个指针控制函数,下面就分别介绍这些函数:

current():返回当前数组指针指向的元素,如果数组指针指向超出了单元列表的末端则返回 FALSE,它的原型如下:

mixed current ( array &$array )

end():将数组的内部指针指向最后一个元素并返回其值,它的原型如下:

mixed end ( array &$array )

next():将数组中的内部指针向前移动一位并返回其值,当没有更多单元时返回 FALSE,它的原型如下:

mixed next ( array &$array )

prev():将数组的内部指针倒回一位并返回其值,当没有更多单元时返回 FALSE,它的原型如下:

mixed prev ( array &$array )

reset():将数组的内部指针指向第一个元素并返回其值,如果数组为空则返回 FALSE,它的原型如下:

mixed reset ( array &$array )

这些数组指针控制函数的加入,使得 PHP 的数组使用可以极为灵活。我们可以通过使用指针控制函数很方便地访问任何数字的任何元素。

<?php
	function return_item($arr,$num=0){		//定义函数
		for($i=0;$i<$num;$i++){		//循环向前移动数组指针
			next($arr);
		}
		echo "<br />第{$num}个元素为:".current($arr);		//输出当前数组指针指向的元素
	}
	$arr=array('I'=>'hello','II'=>2,'III'=>'D','IV'=>376,358);		//定义一个数组
	echo '输出数组的详细信息:';
	return_item($arr);		//调用函数并传入参数输出对应的数组元素
	return_item($arr,1);
	return_item($arr,2);
	return_item($arr,3);
	return_item($arr,5);		//由于数组元素只有 5 个,因此输出第 6 个元素为空
?>

上述代码运行结果为:

输出数组的详细信息:
第 0 个元素为:hello
第 1 个元素为:2
第 2 个元素为:D
第 3 个元素为:376
第 5 个元素为:

上面的代码演示了使用 next 函数向前移动数组指针来输出数组元素的值,我们还可以通过扩展自定义函数来使用 prev 函数向后移动指针来返回数组元素的值。

<?php
	function return_item($arr,$num=0){		//定义函数
		if($num<0){
			end($arr);		//将数组指针指向最后一个元素
			for($i=0;$i<abs($num)-1;$i++){		//abs 函数用于取得变量的绝对值
				prev($arr);
			}
			echo "<br />第{$num}个元素为:".current($arr);		//输出当前数组指针指向的元素
		}else{
			for($i=0;$i<$num;$i++){		//循环向前移动数组指针
				next($arr);
			}
			echo "<br />第{$num}个元素为:".current($arr);		//输出当前数组指针指向的元素
		}
	}
	$arr=array('I'=>'hello','II'=>2,'III'=>'D','IV'=>376,358);		//定义一个数组
	echo '输出数组的详细信息:';
	return_item($arr);		//调用函数并传入参数输出对应的数组元素
	return_item($arr,-1);
	return_item($arr,2);
	return_item($arr,1);
	return_item($arr,-2);
?>

上述代码运行结果为:

输出数组的详细信息:
第 0 个元素为:hello
第-1 个元素为:358
第 2 个元素为:D
第 1 个元素为:2
第-2 个元素为:376

以上的代码中的自定义函数通过接受整数和负数参数实现了从数组的正向和反向来输出数组元素。这里只简单展现了数组控制指针的灵活之处,小伙伴可以通过自己扩展函数来获得更加灵活的功能。

历史上的今天:
让小雨知道,这篇文章帮到了你

展开阅读全文

评论 0

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

登录

忘记密码 ?

切换登录

注册