一、什么是数组?
数组是特殊的变量,它可以同时保存一个以上的值。数组能够在单一变量名中存储许多个值,并且我们能够通过引用索引号来访问某个值。
在 PHP 中,array() 函数用于创建数组,其语法形式为:array();
二、数组的分类
在 PHP 中,有三种数组类型:
索引数组:带有数字索引的数组
关联数组:带有指定键的数组
多维数组:包含一个或多个数组的数组
代码举例:
//这是一个索引数组
$fruits = array ("apples","oranges","bananas","pears");
printf('<pre>%s</pre>',print_r($fruits,true));
echo '<hr>';
//这是一个关联数组
$student = array("class"=>"一一班","name" => "王二小", "age" => "7");
printf('<pre>%s</pre>',print_r($student,true));
echo '<hr>';
//这是一个多维数组
$city = array(
'河南省' => array(
'郑州市',
'新郑市',
'开封市',
'洛阳市',
'南阳市'=> array(
'卧龙区',
'宛城区',
'高新区',
'淅川县',
),
),
'河北省' => array(
'石家庄市',
'唐山市',
'秦皇岛市',
'邯郸市',
'邢台市',
),
'陕西省' => array(
'西安市',
'宝鸡市',
'咸阳市',
'铜川市',
'渭南市',
),
);
printf('<pre>%s</pre>',print_r($city,true));
效果展示:
三、十几常用数组函数
1.array_combine()函数
作用:通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值
语法:array_combine(keys,values);
代码举例:
$name = array("赵一","钱二","孙三","王四");
$number = array("11号","43号","25号","41号");
$he = array_combine($name,$number);
printf('<pre>%s</pre>',print_r($he,true));
效果展示:
2.array_fill()函数
作用:用键值填充数组
语法:array_fill(index,number,value);
代码举例:
$a = array_fill(1,2,"王二小");
printf('<pre>%s</pre>',print_r($a,true));
效果展示:
3.array_chunk()函数
作用:把数组分割为新的数组块。其中每个数组的单元数目由 size 参数决定。
语法:array_chunk(array,size,preserve_key);
代码举例:
$name = array("赵一","钱二","孙三","王四");
$number = array("11号","43号","25号","41号");
$he = array_chunk($name,1);
printf('<pre>%s</pre>',print_r($he,true));
echo '<hr>';
$name = array("赵一","钱二","孙三","王四");
$number = array("11号","43号","25号","41号");
$he = array_chunk($name,2);
printf('<pre>%s</pre>',print_r($he,true));
echo '<hr>';
$name = array("赵一","钱二","孙三","王四");
$number = array("11号","43号","25号","41号");
$he = array_chunk($name,3);
printf('<pre>%s</pre>',print_r($he,true));
echo '<hr>';
$name = array("赵一","钱二","孙三","王四");
$number = array("11号","43号","25号","41号");
$he = array_chunk($name,4);
printf('<pre>%s</pre>',print_r($he,true));
####效果展示:
4.array_diff()函数
作用:比较两个数组的键值,并返回差集
语法:array_diff(array1,array2,array3…);
代码举例:
$a = array("red" => "红色", "yellow" => "黄色", "blue" => "蓝色","pink" =>"粉色");
$b = array("black" => "黑色", "white" => "白色", "blue" => "蓝色","green"=>"绿色");
$c = array("red" => "红色", "blue" => "蓝色", "magenta" => "洋红色","gray" =>"灰色");
// $result = array_diff($a,$b,$c);
printf('<pre>%s</pre>',print_r(array_diff($a,$b,$c),true));
效果展示:其他数组都与第一数组进行比较,并且返回第一数组与其他 数组中不重复的值。
5.array_search()函数
作用:在数组中搜索某个键值,并返回对应的键名。
语法:array_search(value,array,strict);
代码举例:
$a = array("red" => "红色", "yellow" => "黄色", "blue" => "蓝色","pink" =>"粉色");
echo array_search("黄色",$a),'<br>';
echo array_search("粉色",$a),'<br>';
echo array_search("红色",$a),'<br>';
echo array_search("蓝色",$a),'<br>';
效果展示:
6.array_sum()函数
作用:返回数组中所有值的和
语法:array_sum(arra)
代码举例:
$a=array("苹果"=>"56","西瓜"=>"12","香蕉"=>"35");
echo array_sum($a);
效果展示:
7.array_intersect()函数
作用:用于比较两个(或更多个)数组的键值,并返回交集。
语法:array_intersect(array1,array2,array3…);
代码举例:
$a = array("red" => "红色", "yellow" => "黄色", "blue" => "蓝色","pink" =>"粉色");
$b = array("black" => "黑色", "white" => "白色", "blue" => "蓝色","green"=>"绿色");
$c = array("orange" => "橙色", "blue" => "蓝色", "magenta" => "洋红色","gray" =>"灰色");
$result = array_intersect($a,$b,$c);
print_r($result);
效果展示:
8.array_rand()函数
作用:返回数组中的随机键名,或者如果您规定函数返回不只一个键名,则返回包含随机键名的数组。
语法:array_rand(array,number);
代码举例:
$family = array("father","mother","sister","brother");
printf('<pre>%s</pre>',print_r($family,true));
$family = array("father","mother","sister","brother");
$rand = array_rand($family,2);
echo $family[$rand[0]]."<br>";
echo $family[$rand[1]]."<br>";
echo $family[$rand[2]]."<br>";
echo $family[$rand[3]]."<br>";
echo $family[$rand[4]]."<br>";
效果展示:规定了随机返回2个数值,所以下面打印再多,也只是在数值中随机显示2个.
9.array_pop()函数
作用:删除数组中的最后一个元素
语法:array_pop(array);
代码举例:
$a = array(1,3,5,7,9);
print_r(array_pop($a));// 打印被删除的元素
printf('<pre>%s</pre>',print_r($a,true));//打印处理之后的数组
效果展示:
10.array_flip()函数
作用:用于反转/交换数组中所有的键名以及它们关联的键值。
语法:array_flip(array);
代码举例:
$color = array("red" => "红色", "yellow" => "黄色", "blue" => "蓝色","pink" =>"粉色");
printf('<pre>%s</pre>',print_r($color,true));
$color = array("red" => "红色", "yellow" => "黄色", "blue" => "蓝色","pink" =>"粉色");
$result = array_flip($color);
printf('<pre>%s</pre>',print_r($result,true));
效果展示:
四、四个数组回调函数
1.array_filter()函数
作用:用回调函数过滤数组中的元素。该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。
语法:array_filter(array,callbackfunction);
代码举例:
function test($x)
{
return($x);
}
$a=array("a","b",7,3,16);
print_r(array_filter($a,"test"));
echo '<hr>';
$arr = [50, 'color',['apple','pears','orange'], true, null, false, '', 0, '0'];
$res = array_filter($arr,function($item){
return $item;
});
printf('<pre>%s</pre><hr>', print_r($res, true));
效果展示:
2.array_map()函数
作用:array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
语法:array_map(myfunction,array1,array2,array3…);
代码举例:
function myvalue($x,$y)
{
if ($x===$y)
{
return "same";
}
return "different";
}
$a=array("10","8","24");
$b=array("5","8","24");
$c=array("5","9","24");
print_r(array_map("myvalue",$a,$b));
echo '<br>';
print_r(array_map("myvalue",$b,$c));
效果展示:
3.array_reduce()函数
作用:向用户自定义函数发送数组中的值,并返回一个字符串。
语法:array_reduce(array,myfunction,initial);
代码举例:
function diy($x,$y)
{
return $x."---".$y;
}
$a=array("apple","bread","rice","pear");
$b=array("china","henan","nanyang","wolong");
print_r(array_reduce($a,"diy"));
print_r(array_reduce($b,"diy"));
效果展示:
4.array_walk()函数
作用:对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。
语法:array_walk(array,myfunction,userdata…);
代码举例:
function color($v,$k)
{
echo "The $k are $v .<br>";
}
$a=array("flowers"=>"red","trees"=>"green","cups"=>"blue");
$res2=array_walk($a,"color");
printf('<pre>%s</pre><hr>', print_r($res2,true));
效果展示:
五、array_slice()函数和array_splice()函数
1.array_slice()函数
作用:在数组中根据条件取出一段值,并返回
语法:array_slice(array,start,length,preserve);
代码举例:
$family = array("father","mother","sister","brother");
printf('<pre>%s</pre>',print_r(array_slice($family,0,2),true));
printf('<pre>%s</pre>',print_r(array_slice($family,1,3),true));
效果展示:
2.array_splice()函数
作用:从数组中移除选定的元素,并用新元素取代它。
语法:array_splice(array,start,length,array)
代码举例:
$a = array("red" => "红色", "yellow" => "黄色", "blue" => "蓝色","pink" =>"粉色");
$b = array("灰色","洋红色", "黑色", "白色");
array_splice($a,0,2,$b);
printf('<pre>%s</pre>',print_r(array_splice($a,0,2,$b),true));
array_splice($a,1,3,$b);
printf('<pre>%s</pre>',print_r(array_splice($a,1,3,$b),true));
效果展示:
六、总结
1.数组函数与字符串函数可以对照学习,有些功能是类似的,也方便记忆。
2.数组函数因为要编写的代码相对比字符串多,易出错,要注意书写和符号,尤其要注意数组之间的嵌套关系。
3.array_slice()函数只是选取一段元素,而array_splice()函数会用新的元素替代选取的那段元素。