何为数组?
①数组是内存中一块连续的空间,用来存储多个数据
②数组中的每个元素都由一个特定的标识符来区分,称之为键(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中,若存在返回键名。