数组元素和访问方法与字符串中单个字符的访问访问方法一样:
<?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]; //显示数组中的“面包” ?>
执行结果如下所示:
数值变量名后面的方括号中的内容不一定必须为常量,可以是任何表达式,只要表达式的值是一个合适的整数或字符串就行:
不仅能访问数组元素的值,还能用同样的方法修改数组元素的值;
把数组元素看成单独的变量,就能随意创建、读取、写入它的值
例子:
将数组中的第三个元素的值从“烧鸡”换成“烧鸭”:
<?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;
普通变量,用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()函数
读取关联数组的部分元素;
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语句输出得到一个空字符串;
用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() 函数式例外情况,这两个函数只返回当前元素的键或值,指针没有移动);
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,至此循环结束;
若这篇文章有帮到你,给个赞,收个藏,欢迎大家留言评论;
若文章有什么错误,欢迎大家指教。