【php】数组

	何为数组?

	①数组是内存中一块连续的空间,用来存储多个数据

	②数组中的每个元素都由一个特定的标识符来区分,称之为键(key),而每个键对应一个值(value)

	③数组中的元素都以键值对的形式存在,即:键名=>值(key=>value)

	④在php中,键名有一个别名,叫做索引,所以  
	 	键名=>值(key=>value)  
	 	索引=>值(index=>value)	
	    是一样的


	数组的创建

在php中创建一个数组有两种方式:
	①使用array()来创建
	②使用[]来创建

使用array()来创建一个数组:
	
	使用array()语言结构创建一个数组,它接受任意数量用逗号分隔的键=>值对,其中键可以为整型和字符串型,值可以为任何数据类型
	
	array()不是常规的函数,只是php的一个语言结构,在字面上用于表示数组

使用array()来创建数组案例:
	$arr=array();//创建一个空数组

	//创建一个一维数组,数组中有五个元素
	$arr=array(
		"one",	//数组的第一个元素,索引默认为有序数字,从零开始
		"two",	//数组的第二个元素,索引为1
		"three",	//数组的第三个元素,索引为2
		"four",	//数组的第四个元素,索引为3
		"five"	//数组的第五个元素,索引为4
	);
	
	上述数组中有五个元素,如果我们想追加两个数组元素,应该如何操作?
		
		$arr[5]="six";
		$arr[6]="seven";

使用[]来创建一维数组案例:
	 //指定索引为数字,所以此数组为索引数组

	      	$arr[0]="one";//添加第一个元素时,自动创建数组
$arr[1]="two";
$arr[2]="three";
$arr[3]="four";
$arr[4]="five";

	//指定索引为字符串,所以此数组为关联数组

	      	$arr["one"]="one";//添加第一个元素时,自动创建数组
$arr["two"]="two";
$arr["three"]="three";
$arr["four"]="four";
$arr["five"]="five";

	数组的分类:

按照数组的键名可以将数组分为两大类:
	①索引数组
	②关联数组

何为索引数组?

	索引数组:数组中元素的键名或索引全为数字的数组称为索引数组
	
	例如:创建一个一维索引数组
	$arr=array(
		"one",	//数组的第一个元素,键名(索引)默认为数字,从零开始
		"two",	//数组的第二个元素
		"three",	//数组的第三个元素
		"four",	//数组的第四个元素
		"five"	//数组的第五个元素
	);
	当不指定键名或索引时,键名或索引默认为数字,并且从零开始,逐步累加

何为关联数组?

	关联数组::数组中至少有一个元素的键名或索引为字符串的数组称为关联数组
	
	例如:创建一个一维关联数组
	$arr=array(
		"one"=>100,	//数组的第一个元素,键名为字符串"one"
		"two"=>200,	//数组的第二个元素
		"three"=>300,  //数组的第三个元素
		"four"=>400,   //数组的第四个元素
		"five"=>500     //数组的第五个元素
	);

注意:获取关联数组中元素的值的格式:变量名[索引];
如:	$arr['one'];		$arr['two'];		$arr['three'];		$arr['four'];
	$arr['five'];


	常用的数组函数:

(1)count(数组名);主要用来获取数组中的元素个数,返回的是一个整型值
	
	$arr=array(
		"one"=>100,	//数组的第一个元素,键名为字符串"one"
		"two"=>200,	//数组的第二个元素
		"three"=>300,//数组的第三个元素
		"four"=>400,//数组的第四个元素
		"five"=>500	//数组的第五个元素
	);
	$num=count($arr);
	echo "\$arr数组中的元素个数为:".$num;

(2)explode(分隔符,目标字符串);主要用来将一个字符串以某种分隔符进行分隔,分割后的每一段都作为数组的一个元素;返回结果为一个数组

	$str="one-two-three-four-five";
	$arr=explode("-",$str);
	print_r($arr);//使用print_r函数查看数组信息

(3)is_array(变量);主要用来判断变量是否为一个数组
	     is_int(变量)   is_string(变量)
		
		if(is_array($arr)){
			echo "\$arr是一个数组";
		}else{
			echo "\$arr不是一个数组";
		}

(4)implode(分隔符,目标数组);主要用来将一个数组中的所有元素以某种分隔符连接成一个字符串

	$arr=array(
		"one"=>100,	//数组的第一个元素,键名为字符串"one"
		"two"=>200,	//数组的第二个元素
		"three"=>300,//数组的第三个元素
		"four"=>400,//数组的第四个元素
		"five"=>500	//数组的第五个元素
	);
	$str=implode("/",$arr);
	echo $str;
	
	结果:
	one/two/three/four/five


	数组的遍历:

第一种方式:使用foreach循环遍历数组:
	foreach循环遍历数组的格式:
		foreach(数组名 as 键名=>键值){
			//循环体
		}
		键名:为每次遍历的索引  键值:为每次遍历的值

案例:利用foreach循环遍历关联数组
	$arr=array(
		"one"=>100,	//数组的第一个元素,键名为字符串"one"
		"two"=>200,	//数组的第二个元素
		"three"=>300,//数组的第三个元素
		"four"=>400,//数组的第四个元素
		"five"=>500	//数组的第五个元素
	);

	foreach($arr as $key=>$value){
		echo "数组元素的键名为:".$key."<br/>";//键名为字符串
		echo "数组元素的值为:".$value."<br/>";
	}

案例:利用foreach循环遍历索引数组

	$arr=array(
		100,	 //数组的第一个元素,键名为字符串"one"
		200,    //数组的第二个元素
		300,    //数组的第三个元素
		400,    //数组的第四个元素
		500     //数组的第五个元素
	);

	foreach($arr as $key=>$value){
		echo "数组元素的键名为:".$key."<br/>";//键名为数字
		echo "数组元素的值为:".$value."<br/>";
	}


第二种方式:使用for循环遍历索引数组

	由于数组使用有序的数字作为索引,所以使用一个for循环就可以很容易的显示数组的内容。		

	$arr=array(
		"one",	//数组的第一个元素,键名(索引)默认为数字,从零开始
		"two",	//数组的第二个元素
		"three",	//数组的第三个元素
		"four",	//数组的第四个元素
		"five"	//数组的第五个元素
	);

	//获取数组的元素个数
	$num=count($arr);
	for($i=0;$i<$num;$i++){
		echo "数组元素的值为:".$arr[$i];
	}

第三种方式:使用list()结合each()来循环遍历数组

	①each():返回数组中当前指针位置的 键/值 对, 并将数组指针向前移动一步

	②list() :把数组中的值赋给list()括号中列出的变量

	③list($key,$value)和each()一起使用,是将当前数组元素的键和值分别赋给list()括号中所列的两个变量。

案例:
	<?php
	$arr=array(
		"one"=>1,
		"two"=>2,
		"three"=>3
	);
	while(list($key,$value)=each($arr)){
		echo $key."=>".$value."<br/>";
	}
	?>

	何为多维数组?

何为多维数组?
	数组中的元素又是数组的数组,称为多维数组
	
	如:
	$arr=array(
		array("one","two"),    //数组中的第一个元素,但是本身又是一个数组
		array("three","four"), //数组中的第二个元素,但是本身又是一个数组
		"five"		       //数组中的第三个元素,是一个字符串类型
      );


注意:多维数组中最常见的就是二维数组
		
二维数组:是有固定的行数和列数的规则数组
	
	格式:数组名[行索引][列索引];


二维数组?
	如:
	$products[0][1]:代表的第一行第二列的数据

	//红色部分为一个索引数组
	$products = array (
		array ( " 苹果 " , 6 , 28.8 ),//行
		array ( " 猪肉 " , 2 , 32.1 ),
		array ( " 饼干 " , 3 , 45.3 )
	);
	获取二维数组中第一行第一列的值:$products[0][0];

	//蓝色部分为一个关联数组
	$products = array (
		array ( "产品名"=>" 苹果 " , "数量"=>6 , "价格"=>28.8 ),
		array ( "产品名"=>" 猪肉 " , "数量"=>2 , "价格"=>32.1 ),
		array ( "产品名"=>" 饼干 " , "数量"=>3 , "价格"=>45.3 )
	);
	
	获取二维数组中第一行第一列的值:
	$products[0]["产品名"];

	常用的数组处理函数:

(1)array_keys($arr);返回数组中所有的键名

	案例:
	<?php
	$arr=array(
		0=>100,
		"color"=>"red"
	);
	print_r(array_keys($arr));
	?>

	在浏览器中的显示:
	Array(
		[0]=>0
		[1]=>color
	)

(2)array_values($arr),返回数组中所有的值。

	案例:
	<?php
	$arr=array(
		0=>100,
		"color"=>"red"
	);
	print_r(array_values($arr));
	?>

	在浏览器中的显示:
	Array(
		[0]=>100
		[1]=>red
	)

(3)in_array($value, $arr),检索$value是否存在于$arr中,返回布尔值
	案例:
	<?php
	//①只检测值
	$arr1=array("a","b","c",1);
	if(in_array("a",$arr1)){//只检测值
		echo  '字符a在数组$arr1中存在';
	}else{
		echo  '字符a在数组$arr1中不存在';
	}
	结果:字符a在数组$arr1中存在
	//②检测值和类型
	$arr1=array("a","b","c",1);
	if(in_array("1",$arr1,true)){//如果第三个参数设置为true,则还会对搜索值与数组中值类型进行检查
		echo  '字符1在数组$arr1中存在';
	}else{
		echo  '字符1在数组$arr1中不存在';
	}
	结果:字符1在数组$arr1中不存在
	?>

(4)array_key_exists($key, $arr),检查给定的键名$key是否存在于数组$arr中

		参数1:给定的索引
		参数2:目标数组

	案例:
	<?php
	$arr=array("id"=>1,"name"=>"admin");
	if(array_key_exists("name",$arr)){
		echo '键名name存在于数组$arr中';
	}else{
		echo '键名name不存在于数组$arr中';
	}

	结果:键名name存在于数组$arr中
	?>

(5)array_search($value, $arr), 在数组$arr中搜索给定的值$value,若存在返回相应的键名。
		参数1:搜索值
		参数2:目标数组
	案例:
	<?php
	$arr1=array(0=>"a",1=>"b",2=>"c");
	$key=array_search("a",$arr1);
	If($key!==false){
		echo "键名为:$key";
	}else{
		echo  "无匹配结果";
	}

	结果:
		键名为:0
	?>

(6)array_sum($arr),计算数组中所有值的和。
		参数:目标数组
	案例:
	<?php
	$arr=array(1,2,3,'a');
	echo array_sum($arr);	
	结果:6	
	?>

注意:
1.此函数用于计算数组中所有值的和,如果数组元素值的类型为整型或浮点型,则进行相加
2.非数字的数组元素的值将视作0来处理

(7)array_merge($arr1, $arr2, …),合并两个或多个数组。	
	案例:
	<?php
	$array1 = array(
		"color" => "red",
		 2,
		4
	);	
	$array2 = array(
		"a",
		"b", 
		"color" => "green", 
		"shape" => "trapezoid", 
		4
	);
	$result = array_merge($array1, $array2);
	print_r($result);	
	?>

浏览器中显示:
Array
(
    [color] => green
    [0] => 2
    [1] => 4
    [2] => a
    [3] => b
    [shape] => trapezoid
    [4] => 4
)

注意:
	1.一个数组中的值附加在前一个数组的后面,返回作为结果的数组

	2.如果输入的数组中,有相同的字符串键名,则该键名后面的值会覆盖前一个值(红色标注部分)
	
	3.如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面
	
	案例:
	<?php
	$array1 = array();
	$array2 = array(1 => "data");
	$result = array_merge($array1, $array2);
	?>

浏览器中显示:
Array
(
    [0] => data
)

(8)array_diff($arr1, $arr2),返回两个数组差集数组。	
	案例:
	<?php
	$array1 = array("a" => "green", "red", "blue", "red");
	$array2 = array("b" => "green", "yellow", "red");
	$result = array_diff($array1, $array2);
	print_r($result);
	?>

浏览器中显示:
Array
(
    [1] => blue
)

(9)array_interersect($arr1, $arr2),返回多个数组的交集。	
	案例:
	<?php
	$array1 = array("a" => "green", "red", "blue");
	$array2 = array("b" => "green", "yellow", "red");
	$result = array_intersect($array1, $array2);
	?>

浏览器中显示:
Array
(
    [a] => green
    [0] => red
)

(9)sort($arr),由小到大排序
	注意:将删除原有键名,并赋予新的键名	
	案例:
	<?php
	$arr=array(	
		12,
		50,
		30,
		100
	);
	sort($arr);
	print_r($arr);
	?>

(10)rsort($arr),由大到小排序。
	注意:将删除原有键名,并赋予新的键名	
	案例:
	<?php
	$arr=array(	
		12,
		50,
		30,
		100
	);
	rsort($arr);
	print_r($arr);
	?>

(11)ksort($arr),对数组按照键名由小到大排序,保留键名与数据的关联。
		
	案例:
	<?php
	$fruits = array(
		"d"=>"lemon", 
		"a"=>"orange", 
		"b"=>"banana", 
		"c"=>"apple"
	);
	 ksort($fruits);
	 foreach ($fruits as $key => $val) {
    		echo "$key = $val\n";
	}
	?>

结果:
	a = orange
	b = banana
	c = apple
	d = lemon

(12)krsort($arr),对数组按照键名由大到小排序,保留键名与数据的关联		
	案例:
	<?php
	$fruits = array(
		"d"=>"lemon", 
		"a"=>"orange", 
		"b"=>"banana", 
		"c"=>"apple"
	 );
	 krsort($fruits);
	foreach ($fruits as $key => $val) {
    		echo "$key = $val\n";
	}	
	?>

结果:
	d = lemon
	c = apple
	b = banana
	a = orange

(13)count($arr),统计数组的单元个数。		
	案例:
	<?php
	$arr=array(
		"one",
		"two",
		array(
			"threee",
			"four",
			"five"
		)
	);
	echo count($arr);//结果为:3
	echo count($arr,1);//结果为:6	
	?>

(14)range(),创建一个指定范围的数组。
		
	案例:

	$arr=range(0,12);

	其实是创建了一个这样的数组:

	$arr=array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);

(15)array_unique($arr),移除数组中重复的元素。
		
	案例:
	<?php
	$input = array("a" => "green", "red", "b" => "green", "blue", "red");
	$result = array_unique($input);
	print_r($result);
	?>

在浏览器中显示:

Array
(
    [a] => green
    [0] => red
    [1] => blue
)

(16)array_reverse($arr, true),将一个数组逆向排序,如果第二个参数为true,则保持键名
		
	案例:
	<?php
	$input  = array("php", 4.0, array("green", "red"));
	$result = array_reverse($input);
	$result_keyed = array_reverse($input, TRUE);
	?>

在浏览器中显示:
第一个输出结果:如果没有第二个参数的话,则键名重新分配
Array
(
    [0] => Array
        (
            [0] => green
            [1] => red
        )
    [1] => 4
    [2] => php
)
在浏览器中显示:
第二个输出结果:如果第二个参数为true的话,则保留原有键名

Array
(
    [2] => Array
        (
            [0] => green
            [1] => red
        )
    [1] => 4
    [0] => php
)	


(17)array_rand($arr, $num),随机从数组中取得$num个元素。
		注意:返回一个随机元素的键名或返回一个随机元素的键名所组成的数组

	案例:

	<?php
	$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
	$rand_keys = array_rand($input, 2);//随机获取二个元素
	print $input[$rand_keys[0]] . "\n";//获取随机产生的第一个元素的值
	print $input[$rand_keys[1]] . "\n";//获取随机产生的第二个元素的值
	?>

(18)shuffle($arr),将数组的顺序打乱
	案例:

	<?php
	$arr=range(0,12);
	$arr1=shuffle($arr);//将数组元素顺序打乱,是随机打乱的,无规律
	print_r($arr1);	
	?>

(19)array_flip(目标数组);主要用来交换数组中键和值

	案例:

	<?php
	$arr=array(
			array(
				"a"=>1,
				"b"=>2
			),
			"c"=>3,
			"d"=>4
		);
		print_r(array_flip($arr));	
	?>

(20)extract($arr),用于把数组中的元素导入到当前的文件中,键名为变量名,值为变量值

	案例:

	<?php
	$array = array ( 
		"key1" => "value1" ,
	 	"key2" => "value2" , 
		"key3" => "value3" 
	);
	extract( $array );

	echo $key1;//数组中第一个元素的键名变为变量名$key1
	echo $key2 ;
	echo $key3;
	?>

(21)array_push($arr, $value1, $value2..),将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素个数。

(22)array_pop($arr),将数组的最后一个元素弹出(出栈)。

(23)array_key_exists($key, $arr),检索数组$arr中,是否有$key这个键名。

(24)array_search($value, $arr), 检索$value是否在$arr中,若存在返回键名。






	


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值