数组在php中是以键-值对的方式存储--Map(key , value) 。数组的索引就是key,或者定义一个属性做为key均可以。php
一、array( ): 建立数组html
php中,有三种数组类型:索引数组,关联数组,多维数组。c++
索引数组,带数字索引的数组,$arr1=array( "A" , "B" , "C" ),默认索引 0,1,2...;正则表达式
关联数组,带指定键的数组,$arr2=array( "id"=>1 , "name"=>"Tom" , "info"=>"Tom is ...." );c#
多维数组,数组的元素又是数组。数组
<?php header("content-type: text/html;charset=utf-8"); /*索引数组*/ echo "索引数组<br />方式一:索引自动分配<br />"; $arr1=array("A","B","C"); print_r($arr1); echo "<br />"."方式二:手动分配索引:<br />"; $arr2=array(); $arr2[0]="A"; $arr2[1]="B"; $arr2[2]="C"; print_r($arr2); /*关联数组*/ echo "<hr/>"."关联数组<br />"; $arr3=array("id"=>1,"name"=>"Tom","info"=>"Tom is ..."); print_r($arr3); /*多维数组*/ echo "<hr/>"."多维数组<br />"; $arr4=array(array(1,2,3),array("a","b","c","d"),array("Tom")); echo "<pre>";//<pre>...</pre>预格式化文本 print_r($arr4); echo "</pre>"; ?>
上述代码的运行结果以下图所示:函数
二、数组的循环遍历code
a. for循环(只能用于默认索引),以下段代码示例所示,打印的结果是 A B C D E。其中,count($arr1)是计算数组$arr1的数组元素个数。htm
<?php header("content-type: text/html;charset=utf-8"); $arr1=array("A","B","C","D","E"); for ($i=0; $i<count($arr1); $i++) { echo $arr1[$i]." "; } ?>
b. foreach循环,专门用于数组的循环遍历。 语法格式是: foreach( $数组名 as $key => $value){ .... //代码段 } 。其中,key是因此下标,value是该下标对应的数组元素。排序
<?php header("content-type: text/html;charset=utf-8"); //foreach 循环索引数组 echo "foreach 循环索引数组:<br/>"; $arr1=array("A","B","C","D","E"); foreach ($arr1 as $key => $value) { echo $key.":".$value." "; } echo "<br />"; //foreach 循环关联数组 echo "foreach 循环关联数组:<br/>"; $arr2=array("id"=>1,"name"=>"Tom","info"=>"Tom is ..."); foreach ($arr2 as $key => $value) { echo $key.":".$value." "; } ?>
本段代码执行结果以下图所示:
三、经常使用的数组相关操做
a. 删除数组中的元素,unset( )。注意:删除数组元素,可是数组索引不变,所以采用for循环会有问题。建议数组循环遍历使用foreach循环。具体使用方法见下段代码实例:
<?php header("content-type: text/html;charset=utf-8"); $arr1=array("A","B","C","D","E"); print_r($arr1);//打印原数组 echo "<br/>"; unset($arr1[0]);//删除数组$arr1中索引为0的元素。 print_r($arr1);//再次打印该元素 ?>
上段代码的运行结果是:
Array ( [0] => A [1] => B [2] => C [3] => D [4] => E )
Array ( [1] => B [2] => C [3] => D [4] => E )
注意:通过我试验,不能直接使用 unset("A")来删除该元素,会报错。
b. 数组的复制:直接使用“=”。须要注意的是,该数组复制成功后,改变$arr1数组中的值时,$arr2数组值不会随之改变(即,值传递,并不是地址传递)。
<?php header("content-type: text/html;charset=utf-8"); $arr1=array("A","B","C","D","E"); $arr2=$arr1;//传递副本(不是数组的地址) print_r($arr2); ?>
c. 数组中添加元素:两种方式,指定索引和不指定索引,具体见下段代码:
<?php header("content-type: text/html;charset=utf-8"); $arr= array();//建立数组 //添加数组元素方式一:指定索引 $arr[0]=1;//添加索引为0的元素 1 $arr["id"]="001";//添加索引下标为id的数组元素 001 $arr["name"]="Tom"; print_r($arr);//打印该数组 echo "<br/>"; //添加数组元素方式二:不指定索引 $arr[]="NanKing";//不指定索引而直接添加新元素,该元素添加到本数组的末尾,索引默认+1 print_r($arr);//打印该数组 ?>
上段代码的执行结果是:
Array ( [0] => 1 [id] => 001 [name] => Tom )
Array ( [0] => 1 [id] => 001 [name] => Tom [1] => NanKing )
d. 排序:sort( ),升序排序,sort( )函数直接修改原数组的顺序。rsort( )降序排序。具体用法见下代码段。当数组元素是数字是,按数字大小比较;当数组元素是字符串是,按首字母ASCII大小比较。
<?php header("content-type: text/html;charset=utf-8"); $arr1=array(22,35,14,69,8,100,66); echo "<br/>"."原数组:"; print_r($arr1); echo "<br/>sort()排序后"; sort($arr1);//sort()排序 print_r($arr1);//打印排序后的数组 $arr1=array(22,35,14,69,8,100,66); echo "<br/>"."原数组:"; print_r($arr1); echo "<br/>rsort()排序后"; rsort($arr1);//rsort()排序 print_r($arr1);//打印原数组 //字符串是按照首字母顺序排序 $arr2=array("Tom","Alice","ceil","Ben","Jack"); echo "<br/>"."原数组:"; print_r($arr2); echo "<br/>sort()排序后"; sort($arr2);//sort()排序 print_r($arr2);//打印排序后的数组 ?>
本段代码的执行结果以下所示:
原数组:Array ( [0] => 22 [1] => 35 [2] => 14 [3] => 69 [4] => 8 [5] => 100 [6] => 66 )
sort()排序后Array ( [0] => 8 [1] => 14 [2] => 22 [3] => 35 [4] => 66 [5] => 69 [6] => 100 )
原数组:Array ( [0] => 22 [1] => 35 [2] => 14 [3] => 69 [4] => 8 [5] => 100 [6] => 66 )
rsort()排序后Array ( [0] => 100 [1] => 69 [2] => 66 [3] => 35 [4] => 22 [5] => 14 [6] => 8 )
原数组:Array ( [0] => Tom [1] => Alice [2] => ceil [3] => Ben [4] => Jack )
sort()排序后Array ( [0] => Alice [1] => Ben [2] => Jack [3] => Tom [4] => ceil )
e. 数组的定位:reset( ) 第一个,next( ) 下一个(若是已经在末尾,那么下一个返回时false),prev( ) 前一个,end( ) 末尾,current()当前。
<?php header("content-type: text/html;charset=utf-8"); $ary=array("Tom", "Sam", "Ben", "Sophia"); // reset 第一个 // next 下一个,若是已经在末尾,那么下一个返回是false // prev 前一个 // end 末尾 // current 当前 //顺序遍历数组 do { echo current($ary),"<br/>"; } while (next($ary)); echo "<hr/>"; //定位到末尾 end($ary); //倒序遍历数组 do { echo current($ary),"<br/>"; } while(prev($ary)); ?>
四、数组中经常使用函数
a. in_array("元素名","数组名"):判断数组中是否包含该元素。
<?php $ary=array("Java", "PHP", "Web", "C++");//声明数组 echo var_dump(in_array("C++", $ary));//$ary数组中包含C++ echo "<br/>"; echo var_dump(in_array("JSP",$ary));//$ary数组中不包含JSP ?>
b. array_reverse($ary): 倒序(原数组元素顺序的倒序,并不是排序)。下段代码的打印结果是:Array ( [0] => C++ [1] => Web [2] => PHP [3] => Java )
<?php $ary=array("Java", "PHP", "Web", "C++");//声明数组 print_r(array_reverse($ary));//倒序并打印 ?>
c. array_merge($ary1,$ary2): 数组的合并。
<?php $ary=array("Java", "PHP", "Web", "C++");//声明数组 $ary2=array_merge($ary, array("C", "C++", "C#"));//将$ary数组与新数组["c","c++","c#"]合并,合并结果赋给$ary2。 print_r($ary2);//打印$ary2结果是: Array ( [0] => Java [1] => PHP [2] => Web [3] => C++ [4] => C [5] => C++ [6] => C# ) ?>
d. array_unique($ary2): 数组去重(若数组元素有重复,删除后面的元素)
<?php $ary=array("Java", "PHP", "Web", "C++");//声明数组 $ary2=array_merge($ary, array("C", "C++", "C#"));//将$ary数组与新数组["c","c++","c#"]合并,合并结果赋给$ary2。 print_r($ary2);//打印$ary2结果是: // Array ( [0] => Java [1] => PHP [2] => Web [3] => C++ [4] => C [5] => C++ [6] => C# ) echo "<br/>"; $ary3=array_unique($ary2);//去除$ary2中重复的元素 print_r($ary3); ?>
上述代码打印$ary2的结果是:Array ( [0] => Java [1] => PHP [2] => Web [3] => C++ [4] => C [5] => C++ [6] => C# )
去重后,打印$ary3的结果是:Array ( [0] => Java [1] => PHP [2] => Web [3] => C++ [4] => C [6] => C# )
e. array_push($ary , 新元素): 在数组的末尾添加元素
<?php $ary=array("Java", "PHP", "Web", "C++");//声明数组 array_push($ary, "C#");//在数组$ary末位添加元素“C#” print_r($ary);//打印插入新元素后的$ary; ?>
c. shuffle($ary): 数组洗牌效果(把数组中的元素按随机顺序从新排列)
<?php header("content-type: text/html;charset=utf-8"); $ary=array("Java", "PHP", "Web", "C++");//声明数组 echo "\$ary原数组:"; print_r($ary); echo "<br/>"; echo "第一次洗牌后:"; shuffle($ary); print_r($ary);//打印第一次洗牌后的$ary echo "<br/>"; echo "第二次洗牌后:"; shuffle($ary); print_r($ary);//打印第二次洗牌后的$ary ?>
上段代码运行结果是:
若想了解更多数组函数,能够参考w3cschool中的《PHP 5 Array 函数》。
五、数组与字符串的转化
a. explode( separator , string ,limit ): 将字符串拆分红数组。separator:必需,规定在哪里分割字符串。string:必需,要分割的字符串。limit:可选,规定所返回的数组元素的数目,默认所有。
<?php $str="Java-Web-PHP-C#-C++-phyon";//须要拆分的字符串 $arr=explode("-",$str);//将字符串$str在“-”出拆分,返回结果放到$arr中 print_r($arr);//打印$arr; ?>
上段代码的打印结果是:Array ( [0] => Java [1] => Web [2] => PHP [3] => C# [4] => C++ [5] => phyon )。
b. implode(separator , array): 把数组元素组合为一个字符串。separator:可选,规定数组元素之间放置的内容,默认是“”(空字符串)。array:必需案,要组合为字符串的数组。
<?php $str="Java-Web-PHP-C#-C++-phyon";//须要拆分的字符串 $arr=explode("-",$str);//将字符串$str在“-”出拆分,返回结果放到$arr中 print_r($arr);//打印$arr; echo "<hr/>"; $str2=implode(",",$arr);//将数组用“,”链接转成字符串。 echo $str2; ?>
六、preg_match_all( )
preg_match_all( ):它的第一个参数是正则表达式,表示匹配条件;第二个参数是字符串;第三个参数是存放匹配结果的数组。具体使用方法见下段实例:
<?php $msgs="Students' no is: 18877, 19900, 16789, 13456,12346!"; //找出字符串$msgs中五位数字 preg_match_all("/\d{5}/", $msgs, $numbers); print_r($numbers); ?>
本段代码的打印结果是:Array ( [0] => Array ( [0] => 18877 [1] => 19900 [2] => 16789 [3] => 13456 [4] => 12346 ) )。