【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 "; } ?> 结果: 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 "; } ?> 结果: 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]] . " ";//获取随机产生的第一个元素的值 print $input[$rand_keys[1]] . " ";//获取随机产生的第二个元素的值 ?> (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中,若存在返回键名。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。