php语法-----03 php 数组相关

        数组在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 ) )。

相关文章
相关标签/搜索