内部预定的函数比自己写的快,内部的不一定是用php写的,可能底层是c语言写的。要求数组、字符串的函数必须都会~!
数组的键/值操作函数
array_values -- 返回数组中所有的值
格式:array array_values ( array input )$a = array("name"=>"张三","age"=>20,"sex"=>"男");
$values = array_values($a);
var_dump($values);
//array(3){[0]=>string(4)"张三" [1]=>int(20) [2]=>string(2)"男"}
<?php
$str=array("one"=>"MissZhou","two"=>"就要","third"=>"累死了");
print_r($str);
echo '<br>';
array_values($str);
print_r($str);
echo '<br>';
前后结果一样==
可以这么写:
<?php
$str=array("one"=>"MissZhou","two"=>"就要","third"=>"累死了");
print_r($str);
echo '<br>';
list($one,$two,$three)= array_values($str);
print_r($one);
echo '<br>';
print_r($two);
echo '<br>';
print_r($three);
echo '<br>';
array_keys -- 返回数组中所有的键名
格式:array array_keys(array input[,mixed search_value [,bool strict]])其中search_value为则只返回该值的键名
$a = array("name"=>"张三","age"=>20,"sex"=>"男");
$keys = array_keys($a);
for($i=0;$i<count($keys);$i++){
echo $keys[$i]." "; //name age sex
}
<?php
$str=array("MissZhou"=>"one","就要"=>"two","累死了"=>"third");
print_r($str);
echo '<br>';
list($one,$two,$three)= array_keys($str);
print_r($one);
echo '<br>';
print_r($two);
echo '<br>';
print_r($three);
echo '<br>';
print_r(array_keys($str,"third"));
关于第三个参数:是否严格等于那个值
<?php
$str=array("MissZhou"=>"one","就要"=>"two","累死了"=>"third","倒计时"=>"10","倒计时1"=>10);
/*
print_r($str);
echo '<br>';
list($one,$two,$three)= array_keys($str);
print_r($one);
echo '<br>';
print_r($two);
echo '<br>';
print_r($three);
echo '<br>';
*/
print_r(array_keys($str,10,true));
输出: Array ( [0] => 倒计时1 )
in_array -- 检查数组中是否存在某个值
格式:bool in_array(mixed needle,array haystack [, bool strict] )其中strict参数:是否匹配类型
$a = array("name"=>"张三","age"=>20,"sex"=>"男");
if(in_array("张三",$a)){
echo " ‘张三’在\$a数组中"; //”张三“在$a数组中
}
array_flip -- 交换数组中的键和值
格式:array array_flip ( array trans )$a = array("name"=>"张三","age"=>20,"sex"=>"男");
$b = array_flip($a);
foreach($b as $k=>$v){
echo "$k=>$v "; // 张三=>name 20=>age 男=>sex
}
array_reverse -- 返回一个单元顺序相反的数组
语法:array array_reverse ( array array [, bool preserve_keys] )如果 preserve_keys 为 TRUE 则保留原来的键名
$a = array("name"=>"张三","age"=>20,"sex"=>"男");
$b = array_reverse($a);
foreach($b as $k=>$v){
echo “$k=>$v ”; // sex=>男 age=>20 name=>张三
}
in_array -- 检查数组中是否存在某个值
格式:bool in_array(mixed needle,array haystack [, bool strict] )其中strict参数:是否匹配类型
$a = array("name"=>"张三","age"=>20,"sex"=>"男");
if(in_array("张三",$a)){
echo " ‘张三’在\$a数组中"; //”张三“在$a数组中
}
在php4.2.0以后 needle可以是数组 <?php
$str=array("os"=>"linux","lan"=>"php",array("a","b"));
if(in_array(array("b","a"),$str))
echo "ba";
else echo"no";
array_search--返回此键值名
同上函数,返回第一个匹配的键值名
array_key_exists键是否存在
<?php
$str=array("os"=>"linux","lan"=>"php",array("a","b"));
echo array_key_exists("os",$str);
还记不记得long long ago之前讲过一个isset()函数,判断是否存在这个值~(定义变量、销毁变量那会讲的) 但是有一个问题:
<?php
$str=array("os"=>"linux","lan"=>"php",array("a","b"),"say"=>null);
echo array_key_exists('say',$str);
if(isset($str["say"]))echo "yes";
else echo"no";
array_flip -- 交换数组中的键和值
格式:array array_flip ( array trans )$a = array("name"=>"张三","age"=>20,"sex"=>"男");
$b = array_flip($a);
foreach($b as $k=>$v){
echo "$k=>$v "; // 张三=>name 20=>age 男=>sex
}
<?php
$str=array("one"=>"MissZhou","two"=>"要","three"=>"好好学习","four"=>"MissZhou");
$str1=array_flip($str);//需要注意要是值重复了怎么办后面的把前面的覆盖~
print_r($str);//不改变原来的数组
print_r($str1);
而且只能是整数和字符串!不转化!只有警告,没有隐式类型转变
array_reverse -- 返回一个单元顺序相反的数组
语法:array array_reverse ( array array [, bool preserve_keys] )如果 preserve_keys 为 TRUE 则保留原来的键名
$a = array("name"=>"张三","age"=>20,"sex"=>"男");
$b = array_reverse($a);
foreach($b as $k=>$v){
echo “$k=>$v ”; // sex=>男 age=>20 name=>张三
}
<?php
$str=array("one"=>"MissZhou","two"=>"要","three"=>"好好学习","four"=>"MissZhou");
$str1=array_reverse($str);//需要注意要是值重复了怎么办后面的把前面的覆盖~
print_r($str);//不改变原来的数组
print_r($str1);
只是前后次序变了,用于反过来的遍历
第二个参数的具体作用:对于刚刚的示例没有变化~区别哩?
处理索引数组有作用:
<?php
$str=array("MissZhou","要","好好学习");
$str1=array_reverse($str,false);//需要注意要是值重复了怎么办后面的把前面的覆盖~
print_r($str);//不改变原来的数组
print_r($str1);
输出: Array ( [0] => MissZhou [1] => 要 [2] => 好好学习 ) Array ( [0] => 好好学习 [1] => 要 [2] => MissZhou )
统计数组元素的个数与唯一性
count -- 计算数组中的单元数目或对象中的属性个数
语法:int count ( mixed var [, int mode] )如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。
<?php
$str="hello";
echo count($str).'<br>';//面试考点
$str="";
echo count($str).'<br>';
$arr=array("MissZhou","要","努力");
echo count($arr).'<br>';
$arr1=array(array(1,2,3),array(4,5));
echo count($arr1).'<br>';
echo count($arr1,1).'<br>';//5+2
array_count_values -- 统计数组中所有的值出现的次数
语法:array array_count_values ( array input )array_unique -- 移除数组中重复的值
语法:array array_unique ( array array )<?php
$str=array("MissZhou","MissZhou","要努力");
print_r(array_count_values($str));
echo '<br>';
print_r(array_unique($str));//只留第一个出现的
使用回调函数处理数组的函数
array_filter -- 用回调函数过滤数组中的单元
语法:rray array_filter ( array input [, callback callback] )
依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
如果没有提供 callback 函数,array_filter() 将删除 input 中所有等值为 FALSE 的条目。
依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
如果没有提供 callback 函数,array_filter() 将删除 input 中所有等值为 FALSE 的条目。
<?php
$arr=array(1,2,3,-3,3,false,"",null,0);
var_dump($arr);
echo '<br>';
var_dump(array_filter($arr));
array (size=9) 0 => 1 1 => 2 2 => 3 3 => -3 4 => 3 5 => false 6 => '' (length=0) 7 => null 8 => 0
array (size=5) 0 => 1 1 => 2 2 => 3 3 => -3 4 => 3回调函数:
<?php
$arr=array(1,2,3,-3,3,false,"",null,0);
var_dump($arr);
echo '<br>';
function myfun($value){
if($value>0) return true;
else return false;
}
var_dump(array_filter($arr,"myfun"));
array (size=9) 0 => 1 1 => 2 2 => 3 3 => -3 4 => 3 5 => false 6 => '' (length=0) 7 => null 8 => 0
array (size=4) 0 => 1 1 => 2 2 => 3 4 => 3用匿名函数:
<?php
$arr=array(1,2,3,-3,4,false,"",null,0);
var_dump($arr);
echo '<br>';
var_dump(array_filter($arr,function($value){
return !($value&1);
}));
array (size=9) 0 => 1 1 => 2 2 => 3 3 => -3 4 => 4 5 => false 6 => '' (length=0) 7 => null 8 => 0
array (size=6) 1 => 2 4 => 4 5 => false 6 => '' (length=0) 7 => null 8 => 0默认保留原有的键名,重新索引:
<?php
$arr=array(1,2,3,-3,4,false,"",null,0);
var_dump($arr);
echo '<br>';
var_dump(array_values(array_filter($arr,function($value){
return !($value&1);
})));
array (size=9) 0 => 1 1 => 2 2 => 3 3 => -3 4 => 4 5 => false 6 => '' (length=0) 7 => null 8 => 0
array (size=6) 0 => 2 1 => 4 2 => false 3 => '' (length=0) 4 => null 5 => 0
array_walk--对数组中的每个成员应用用户函数
语法:bool array_walk ( array &array, callback funcname [, mixed userdata] )//引用型参数,不用再传到一个函数中如果成功则返回 TRUE,失败则返回 FALSE。
将用户自定义函数 funcname 应用到 array 数组中的每个单元。典型情况下 funcname 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funcname。
array_walk() 不会受到 array 内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置。
值、键都有应用到函数:
<?php
$str=array(1,2,3,4);
function myfun($value){
$value=$value*$value;
}
print_r($str);
echo '<br>';
array_walk($str,"myfun");
print_r($str);
echo '<br>';
猜猜结果是什么:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
为什么呢?因为函数上没加引用
<?php
$str=array(1,2,3,4);
function myfun(&$value){
$value=$value*$value;
}
print_r($str);
echo '<br>';
array_walk($str,"myfun");
print_r($str);
echo '<br>';
输出: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 )
<?php
$arr = array("one"=>1,"two"=>2,"three"=>3,"four"=>4,"five"=>5);
function myfun($value, $key) {
echo "{$key} ============ > {$value} <br>";
}
print_r($arr);
echo '<br>';
array_walk($arr, "myfun");
array_walk($arr, function(&$value, $key){
$value="{$key} ----------> {$value}<br>";
});
print_r($arr);
echo '<br>';
可以有第三个参数用于处理:
<?php
$arr = array("one"=>1,"two"=>2,"three"=>3,"four"=>4,"five"=>5);
print_r($arr);
echo '<br>';
array_walk($arr, function($value, $key, $str){
echo "{$key} {$str} {$value}<br>";
}, "###############");
print_r($arr);
echo '<br>';
输出:Array ( [one] => 1 [two] => 2 [three] => 3 )
one##############
two##############
three##############
Array ( [one] => 1 [two] => 2 [three] => 3 )
one##############
two##############
three##############
Array ( [one] => 1 [two] => 2 [three] => 3 )
array_map -- 将回调函数作用到给定数组的单元上
语法: array array_map ( callback callback, array arr1 [, array ...] )array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
<?php
$arr=array(1,2,3,4,5);
$brr=array(2,4,6,8,10);
print_r($arr);
echo '<br>';
function myfun($v,$bv){
echo "$v-----$bv <br>";
return $v*$bv;
}
$rarr=array_map("myfun",$arr,$brr);
print_r($rarr);
输出:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
1-----2
2-----4
3-----6
4-----8
5-----10
Array ( [0] => 2 [1] => 8 [2] => 18 [3] => 32 [4] => 50 )
个数不同短的补空。但是前面的回调函数要是空呢?
1-----2
2-----4
3-----6
4-----8
5-----10
Array ( [0] => 2 [1] => 8 [2] => 18 [3] => 32 [4] => 50 )
个数不同短的补空。但是前面的回调函数要是空呢?
<?php
$arr=array(1,2,3,4,5);
$brr=array(2,4,6,8,10);
print_r($arr);
echo '<br>';
function myfun($v,$bv){
echo "$v-----$bv <br>";
return $v*$bv;
}
$rarr=array_map(null,$arr,$brr);
print_r($rarr);
猜到是合在一起,怎么合?两维边三维了 好神奇~~
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
Array ( [0] => Array ( [0] => 1 [1] => 2 ) [1] => Array ( [0] => 2 [1] => 4 ) [2] => Array ( [0] => 3 [1] => 6 ) [3] => Array ( [0] => 4 [1] => 8 ) [4] => Array ( [0] => 5 [1] => 10 ) )