PHP 访问数组中的元素
1. 访问数组中的元素
数组元素和访问方法与字符串中单个字符的访问访问方法一样:
<?php
$ble=array("苹果"=>"5.68","奶油面包"=>"3","酸奶"=>"20");
$bles=array("豆奶","麦片","酸奶","苹果","8"=>"面包");
$fods=$ble['奶油面包']; //$fods 的值为"5.68"
$cc=$bles['8']; //$cc 的值为"面包"
echo $fods."\r\n";
echo $cc;
?>
执行结果如下所示:
访问素组需要先写变量名,后跟上一对方括号,方括号里面是元素的索引;
若需要访问关联数组的元素,则不是使用数值索引,而是使用字符串索引:
<?php
$ble=array("苹果"=>"5.68","奶油面包"=>"3","酸奶"=>"20");
$bles=array("豆奶","麦片","酸奶","苹果","9"=>"面包");
$fods=$ble['奶油面包']; //$fods 的值为"5.68"
$cc=8;
echo $fods."\r\n";
echo $bles[$cc+1]; //显示数组中的“面包”
?>
执行结果如下所示:
数值变量名后面的方括号中的内容不一定必须为常量,可以是任何表达式,只要表达式的值是一个合适的整数或字符串就行:
2. 改变元素内容
不仅能访问数组元素的值,还能用同样的方法修改数组元素的值;
把数组元素看成单独的变量,就能随意创建、读取、写入它的值
例子:
将数组中的第三个元素的值从“烧鸡”换成“烧鸭”:
<?php
$ble=array("酸菜鱼","白切鸡","烧鸡","卤肉");
$ble[2]="烧鸭";
echo $ble[2];
?>
增加数组元素的两种方式:
<?php
$ble=array("酸菜鱼","白切鸡","烧鸡","卤肉");
$ble[4]="糖醋排骨"; //第一种方括号+索引
echo $ble[4];
$ble[]="菠萝鸡"; //第二种方括号
echo $ble[5];
?>
执行结果如下所示:
还可以用方括号的方式,创建一个全新的数组:
例子 :
<?php
//用array创建一个数组
$ble1=array("酸菜鱼","烧鸡","卤肉","菠萝鸡");
//用[]创建一个相同的数组
$ble2[0]="酸菜鱼2";
$ble2[1]="烧鸡2";
$ble2[2]="卤肉2";
$ble2[3]="菠萝鸡2";
//用空[]创建一个相同的数组
$ble3[]="酸菜鱼3";
$ble3[]="烧鸡3";
$ble3[]="卤肉3";
$ble3[]="菠萝鸡3";
var_dump($ble1);
var_dump($ble2);
var_dump($ble3);
?>
执行结果如下所示:
与普通变量相同,必须先初始化数组;
如果上面的 $ble2 和 $ble3
数组变量已经存在,并且包含其他元素,那么执行代码后,数组可能就会包含不止上述赋值的四个元素;
若无法确定一个数组是否已创建,最好的是在创建数组之前,先对数组变量进行初始化,即便当前还不需要创建数组元素;
初始化数组只需用 array()构造函数
以空的列表为参数即可:
$ble=array()
在创建一个没有任何元素的数组(空数组)之后,还能给它添加元素:
$ble3[]="酸菜鱼3";
$ble3[]="烧鸡3";
$ble3[]="卤肉3";
$ble3[]="菠萝鸡3";
用方括号[]还能给关联数组添加元素或修改元素的值;
关联数组的两种赋值方式:
<?php
//使用array()构造函数创建一个关联数组
$ble=array("title"=>"php",
"author"=>"王某",
"pubYear"=>2019);
//使用数组名加[]创建一个相同的关联数组
$ble=array();
$ble["title"]="php";
$ble["author"]="王某";
$ble["pubYear"]=2019;
var_dump($ble);
var_dump($ble);
?>
执行结果如下所示:
修改关联数组的元素值与修改索引数组的元素值一样,具体方法如下:
$ble["title"]="python";
$ble["pubYear"]=2021;
3. 用 print_r() 函数输出整个数组
普通变量,用print() 和 echo()函数输出,print_r()函数可输出数组的全部内容,用于调试;
print_r($ble);
例子 :
创建一个索引数组和关联数组,再使用print_r()函数输出,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>输出数组</title>
<link rel="stylesheet" type="text/css" href="common.css" />
</head>
<body>
<h1>用print_r()输出数组</h1>
<?php
header("content-type:text/html;charset=utf-8");
$ble=array("酸菜鱼","烧鸡","卤肉","生煎","汤");
$ble2=array("title"=>'PHP',
"author"=>"王某",
"pubYear"=>2019);
echo '<h2>$ble:</h2><pre>';
print_r($ble);
echo '</pre><h2>$ble2:</h2><pre>';
print_r($ble2);
echo "</pre>";
?>
</body>
</html>
执行结果如下所示:
print_r()函数
先输出传递给它的变量的类型,即 array()
,再以key=>value的
形式输出数组的全部元素;
脚本用<pre> 和 </pre>
标签控制print_r()的输出格式,我们看到的就是格式化之后的结果;若没有这些标签,结果将以一行显示在网页上;
如要把print_r()的输出结果储存到一个字符串中,而不是输出到浏览器中,则需要给它传递第二个参数TRUE;
$arrayStructure=print_r($array,true);
echo $arrayStructure;
用 array_slice()函数
读取数组中的连续几个元素
若想一次性访问多个元素,可使用 array_sliece()函数
,他可以从一组数组中读取一组元素;
使用 array_slice()函数时,要把数组变量传递给它,之后第一个元素的位置(从0开始),后面再跟一个数值,表示要读取元素的个数;
函数可返回一个数自,该数组的元素就是原数组的部分元素;
注意: array_slice()
不保留原数组的键值,而是会在新数组中从0开始重新设置索引;
关联数组并没有数值索引,但PHP会记住每个元素在关联数组中的顺序,所以,可利用arrat_silce()函数
读取关联数组的部分元素;
4. 统计数组中元素的个数
count()函数可统计数组元素的个数;
只需把一个数组传递给count()函数,就得到数组的元素个数是多少;
<?php
$ble=array("酸奶","高钙奶","低脂奶","豆奶","脱脂奶");
$bles=array("title"=>"php",
"author"=>"王某",
"pubYear"=>2019);
echo count($ble)."<br>"; //输出"5"
echo count($bles); //输出"3"
?>
执行结果如下所示:
用conut()函数还能读取索引数组的最后一个元素;
例子 :
<?php
$ble=array("酸奶","高钙奶","低脂奶","豆奶","脱脂奶");
$bbc=count($ble)-1;
echo $ble[$bbc];
?>
执行结果如下所示:
一个包含了五个元素的索引数组,它的最后一个元素索引不一定是4,如下面例子:
<?php
$ble=array(0=>"酸奶",1=>"高钙奶",2=>"低脂奶",3=>"豆奶",6=>"脱脂奶");
$bbc=count($ble)-1;
echo $ble[$bbc];
?>
执行结果如下所示:
上面例子中数组使用的是数字键,表示它是一个 索引数组,但键值对不连续,也可以看成一个使用数值键的 关联数组 ;PHP内部不区分索引数组和关联数组
,所以有可能创建一个非连续性的索引数组;
所以在上面的例子这种PHP会输出 Undefined Offset(即“没有定义的偏移”),因此用 echo语句输出得到一个空字符串;
5. 逐个访问数组中的元素
用PHP语言创建数组时,PHP会记住元素的创建顺序,并报存一个内部指针,指向数组中的元素;指针初始化时会指向第一个创建的数组元素,但可以任意地向前或向后移动这个指针;
下表中的函数可操作这个指针并访问指向的元素:
每个函数都只有一个参数,即数组,返回的是找到的元素的值或索引;若找不到返回FALSE;
例子 :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>访问数组</title>
<link rel="stylesheet" type="text/css" href="common.css" />
</head>
<body>
<h2>访问数组</h2>
<?php
header("content-type:text/html;charset=utf-8");
$ble=array("酸菜鱼","烧鸡","卤肉","生煎","羊肉汤");
echo "<p>作者组:".print_r($ble).".</p>";
echo "<p>当前数组元素是:".current($ble).".</p>";
echo "<p>下一个元素是:".next($ble).".</p>";
echo "<P>当前元素的键是:".key($ble).".</P>";
echo "<p>下一个元素是:".next($ble).".</p>";
echo "<p>前一个元素是:".prev($ble).".</p>";
echo "<p>第一个元素是:".reset($ble).".</p>";
echo "<p>最后一个元素是:".end($ble).".</p>";
echo "<p>前一个元素是:".prev($ble).",</p>";
?>
</body>
</html>
执行结果如下所示:
注意在这个脚本中,这些函数是如何向前或向后移动数组指针的(current() 和key() 函数式例外情况,这两个函数只返回当前元素的键或值,指针没有移动);
6. each() 函数
each() 函数,返回数组当前的元素,将指针移动到下一个元素;each() 函数返回的不是一个值,而是一个包含了四个元素的数组,其中包含了键和值;
若找不到某个元素——可能是指针到了末尾,或是空数组,则 each()返回FALSE;
所以,用each() 很容易判断,读取的值是否为FALSE的元素,会返回一个包含了四个元素的数组,若找不到元素,返回FALSE;
each() 函数数组返回的四元数组说明了PHP数组的灵活性,因为它既包含数值型元素,也包含了字符串元素;
如下表所示:
用0索引或"key"访问当前元素的键,用1或"value"访问当前元素的值;
例子 :
<?php
$ble=array(0=>"酸奶",1=>"高钙奶",2=>"低脂奶",3=>"豆奶",6=>"脱脂奶");
$bbc=each($ble);
echo "key:".$bbc[0]."<br>";
echo "value:".$bbc[1]."<br>";
echo "key:".$bbc["key"]."<br>";
echo "value:".$bbc["value"]."<br>";
?>
执行结果如下所示:
用each()函数读取一个值为FALSE的数组元素:
<?php
$ble=array(false);
$bbc=each($ble);
echo "key:".$bbc[0]."\r\n";
echo "value:".$bbc[1]."\r\n";
echo "key:".$bbc["key"]."\r\n";
echo "value:".$bbc["value"]."\r\n";
?>
执行结果如下所示:
因为each()函数会返回当前数组元素,同时把数组指针向前移动一个位置,可在 while 循环中用它访问数组的每个元素;
例子 :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> 用each()返回当前数组元素 </title>
<link rel="stylesheet" type="text/css" href="common.css" />
</head>
<body>
<h2> 用each()返回当前数组元素 </h2>
<?php
header("content-type:text/html;charset=utf-8");
$ble=array("酸菜鱼","烧鸡","卤肉","生煎","羊肉汤");
while ($bbc=each($ble))
{
echo "<dt>$bbc[0]</dt>";
echo "<dt>$bbc[1]</dt>";
}
?>
</body>
</html>
执行结果如下所示:
用each()返回的是数组的四个元素(它的赋值运算结果为TRUE),这个while 循环就会一直执行下去;当到达数组末尾时,each() 函数就会返回FALSE,至此循环结束;
结束语
若这篇文章有帮到你,给个赞,收个藏,欢迎大家留言评论;
若文章有什么错误,欢迎大家指教。