数组的相关处理函数
2014-12-03 21:24
531 查看
1、数组的键、值操作函数2、统计数组元素的个数与唯一性3、使用回调函数处理数组的函数4、数组的排序函数5、拆分、合并、分解与结合数组6、数组与数据结构7、其他有用的数组处理函数
1、数组的键、值操作函数
array_values();用途:返回数组中所有的值格式:array array_values ( array input )
array_keys();用途:返回数组中所有的键名格式:array array_keys(array input[,mixed search_value [,bool strict]]) 其中search_value为空则只返回该值的键名
in_array();用途:检查数组中是否存在某个值格式:bool in_array(mixed needle, array haystack [,bool strict]) 其中strict参数:是否匹配类型
array_flip();用途:交换数组中的键和值格式:array array_flip(array trans)
array_reverse()用途:返回一个单元顺序相反的数组格式:array array_reverse ( array array [, bool preserve_keys] ) 如果 preserve_keys 为 TRUE 则保留原来的键名
案例:
2、统计数组元素的个数与唯一性
count();用途:计算数组中的单元数目或对象中的属性个数
案例:
array_count_values();用途:统计数组中所有的值出现的次数
array_unique();用途:移除数组中重复的值
案例:
结果:
3、使用回调函数处理数组的函数array_filter();用途:用回调函数过滤数组中的单元格式:array array_filter(array input [,callback callback])解释:依次将input数组中的每个值传递到callback函数。如果callback函数返回TRUE,则input数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
如果没有提供callback函数,array_filter()将删除input中所有等值为FALSE的条目。
案例1:非空!empty
结果:
案例2(上边结果的反例):空empty
案例3:
案例三的简化:
结果都为:
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() 会遍历整个数组而不管指针的位置。
案例:
疑问:array 参数的值作为第一个,键名作为第二个。为什么输出键名为索引下标?后来自己给的答案:更改的是数组单元的值,又没有更改键名,还是按正常原则输出的呀,只是在原有的基础上,增加了相应的值罢了。
array_map(); 用途:将回调函数作用到给定数组的单元上格式:array array_map ( callback callback, array arr1 [, array ...] )解释:array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
案例:
4、数组的排序函数
sort -- 对数组排序(升序)rsort -- 对数组逆向排序(降序)usort -- 使用用户自定义的比较函数对数组中的值进行排序
案例:
结果:
根据元素的值对数组排序(保留原有键名和值的关系)asort -- 对数组进行排序并保持索引关系(关联数组排序)arsort -- 对数组进行逆向排序并保持索引关系 uasort -- 用户自定义的比较函数对数组进行排序并保持索引关系
案例:
结果:按值排序:abo,索引关系不变
根据键名对数组排序(保留原来的键)ksort -- 对数组按照键名排序krsort -- 对数组按照键名逆向排序uksort -- 使用用户自定义的比较函数对数组中的键名进行排序
案例:
结果:Array
natsort -- 用“自然排序”算法对数组排序natcasesort -- 用“自然排序”算法对数组不区分大小写字母排序 array_multisort -- 对多个数组或多维数组进行排序
案例:
结果:
sort 和natsort的比较:sort按位排序
结果:
array_multisort -- 对多个数组或多维数组进行排序
结果:
5、拆分、合并、分解与结合数组array_slice -- 从数组中取出一段
array_splice -- 把数组中的一部分去掉并用其它值取代
array_combine -- 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
array_merge -- 合并一个或多个数组
array_intersect -- 计算数组的交集 array_diff -- 计算数组的差集
6、数组与数据结构
array_rand -- 从数组中随机取出一个或多个单元
来自为知笔记(Wiz)
1、数组的键、值操作函数
array_values();用途:返回数组中所有的值格式:array array_values ( array input )
array_keys();用途:返回数组中所有的键名格式:array array_keys(array input[,mixed search_value [,bool strict]]) 其中search_value为空则只返回该值的键名
in_array();用途:检查数组中是否存在某个值格式:bool in_array(mixed needle, array haystack [,bool strict]) 其中strict参数:是否匹配类型
array_flip();用途:交换数组中的键和值格式:array array_flip(array trans)
array_reverse()用途:返回一个单元顺序相反的数组格式:array array_reverse ( array array [, bool preserve_keys] ) 如果 preserve_keys 为 TRUE 则保留原来的键名
案例:
$arr = ['rose','lily','xiaoxue','jack','xiaoming','jack']; /获取一个数组所有的键,以索引数组形式返回 $result =array_keys($arr); print_r($result); //获取一个数组所有的值,以索引数组形式返回 $result = array_values($arr); print_r($result); // in_array() 可以用于判断上传文件格式是否符合要求。$arr = ['jpg','png','gif']; // $result = in_array('jacky',$arr); // var_dump($result); if(in_array('jackok',$arr)){ echo 'jack存在于$arr数组中'; }else{ echo 'jack不存在于$arr数组中'; } // 翻转键值 $brr = array_flip($arr); print_r($brr); // 翻转数组顺序 $arr = ['rose','lily','xiaoxue','jack','xiaoming','ajack']; print_r(array_reverse($arr,true));
2、统计数组元素的个数与唯一性
count();用途:计算数组中的单元数目或对象中的属性个数
案例:
$arr = ['rose','lily','xiaoxue','jack','xiaoming','ajack']; //返回数组单元个数或者对象成员属性个数 echo count($arr);
array_count_values();用途:统计数组中所有的值出现的次数
array_unique();用途:移除数组中重复的值
案例:
<?php $arr = ['a','b','a','c','d','c','a','b']; //统计数组单元值出现的次数 $brr = array_count_values($arr); //移除数组中重复的值 $crr = array_unique($arr); print_r($crr);
结果:
Array ( [a] => 3 => 2 [c] => 2 [d] => 1 ) Array ( [0] => a [1] => b [3] => c [5] => d )
3、使用回调函数处理数组的函数array_filter();用途:用回调函数过滤数组中的单元格式:array array_filter(array input [,callback callback])解释:依次将input数组中的每个值传递到callback函数。如果callback函数返回TRUE,则input数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
如果没有提供callback函数,array_filter()将删除input中所有等值为FALSE的条目。
案例1:非空!empty
<?php [b]include 'db.php'; $sql = "select * from bbs_content limit 1"; $data = select($sql)[0]; echo '<pre>'; //用回调函数过滤数组中的单元 $result = array_filter($data,'myfunc'); function myfunc($x) { return !empty($x); } print_r($result);
结果:
Array ( [id] => 1 [pid] => 4 [uid] => 1 [title] => 阿斯顿发送到 [content] =>发 [edittime] => 1398212373 [posttime] => 1398212373 [visittimes] => 1 [cost] => 10 [ip] => 2130706433 [isopen] => 1 )
案例2(上边结果的反例):空empty
//用回调函数过滤数组中的单元 $result = array_filter($data,'myfunc'); function myfunc($x) { return empty($x); } print_r($result);结果:
Array ( [pic] => [keywords] => [description] => [ishot] => 0 [isjinghua] => 0 [istop] => 0 [allowlevel] => 0 [needreply] => 0 [inbox] => 0 )
案例3:
$arr = [0,1,2,3,true,false,null]; $result = array_filter($arr,'fun'); function fun($a) { if($a){ return true; }else{ return false; } } print_r($result);
案例三的简化:
$result = array_filter($arr,function($x){ return $x;}); print_r($result);
结果都为:
Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 1 )
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 $arr = ['apple','li','banana','xigua','taozi']; echo '<pre>'; //对数组中的每个成员应用用户函数 array_walk($arr,"myfun"); function myfun(&$v,$k) { $v .= 'lai 2 jin'; } print_r($arr); array_walk($arr,'fun','abc'); function fun(&$v,$k,$u) { $v.=$u; }print_r($arr);
结果:
[code]Array
(
[0] => applelai 2 jin
[1] => lilai 2 jin
[2] => bananalai 2 jin
[3] => xigualai 2 jin
[4] => taozilai 2 jin
)
Array
(
[0] => applelai 2 jinabc
[1] => lilai 2 jinabc
[2] => bananalai 2 jinabc
[3] => xigualai 2 jinabc
[4] => taozilai 2 jinabc
)
疑问:array 参数的值作为第一个,键名作为第二个。为什么输出键名为索引下标?后来自己给的答案:更改的是数组单元的值,又没有更改键名,还是按正常原则输出的呀,只是在原有的基础上,增加了相应的值罢了。
array_map(); 用途:将回调函数作用到给定数组的单元上格式:array array_map ( callback callback, array arr1 [, array ...] )解释:array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
案例:
<?php $arr = [10,100,20,60,50,60]; $brr = [11,21,31,41,51,61,71]; //将回调函数作用到给定数组的单元上 $result = array_map('myfun',$arr); function myfun($x) { return $x += 10; } echo '<pre>'; print_r($result);$result = array_map('fun',$arr,$brr); function fun($x,$y) { return $x + $y; } print_r($result);结果:[code]Array
(
[0] => 20
[1] => 110
[2] => 30
[3] => 70
[4] => 60
[5] => 70
)
Array
(
[0] => 21
[1] => 121
[2] => 51
[3] => 101
[4] => 101
[5] => 121
[6] => 71
)
4、数组的排序函数
sort -- 对数组排序(升序)rsort -- 对数组逆向排序(降序)usort -- 使用用户自定义的比较函数对数组中的值进行排序
案例:
<?php $arr = [10,100,20,60,50,60]; echo '<pre>'; /* //对数组排序(升序) sort($arr); //对数组排序(降序) rsort($arr); print_r($arr); */ usort($arr,'myfun'); function myfun($a,$b) { retrun $a-$b; } print_r($arr);
结果:
Array ( [0] => 10 [1] => 20 [2] => 50 [3] => 60 [4] => 60 [5] => 100 )
根据元素的值对数组排序(保留原有键名和值的关系)asort -- 对数组进行排序并保持索引关系(关联数组排序)arsort -- 对数组进行逆向排序并保持索引关系 uasort -- 用户自定义的比较函数对数组进行排序并保持索引关系
案例:
<?php header("content-type:text/html;charset=utf-8"); $users = ['user1' => 'xiongda','user2' => 'xiaohei','user3'=>'xibobai']; echo '<pre>'; //对数组进行升序排序并保持索引关系 // asort($users); //对数组进行降序排序并保持索引关系 // arsort($users); //使用用户自定义函数,对数组进行排序并保持索引关系 uasort($users,'myfun'); function myfun($a,$b) { if($a > $b){ return 1; } if($a < $b){ return -1; } if($a == $b){ return 0; } } print_r($users);
结果:按值排序:abo,索引关系不变
Array ( [user2] => xiaohei [user3] => xibobai [user1] => xiongda )
根据键名对数组排序(保留原来的键)ksort -- 对数组按照键名排序krsort -- 对数组按照键名逆向排序uksort -- 使用用户自定义的比较函数对数组中的键名进行排序
案例:
<?php header("content-type:text/html;charset=utf-8"); $users = ['user6' => 'xiongda','user2' => 'xiaohei','user1'=>'xibobai']; // 对数组按照键名升序排序 ksort($users); // 对数组按照键名降序排序 krsort($users); //使用用户自定义的比较函数对数组中的键名进行排序 uksort($users,'myfun'); function myfun($a,$b) { if($a > $b){ return 1; } if($a < $b){ return -1; } if($a == $b){ return 0; } } echo '<pre>'; print_r($users);
结果:Array
( [user1] => xibobai [user2] => xiaohei [user6] => xiongda )
natsort -- 用“自然排序”算法对数组排序natcasesort -- 用“自然排序”算法对数组不区分大小写字母排序 array_multisort -- 对多个数组或多维数组进行排序
案例:
<?php $arr = ['image123','Image102','image120','Image1202','image1231']; echo '<pre>'; sort($arr); print_r($arr); echo '<hr>'; // 自然排序 natsort($arr); print_r($arr); echo '<hr>'; // 不区分大小写自然排序 natcasesort($arr); print_r($arr);
结果:
Array ( [0] => Image102 [1] => Image1202 [2] => image120 [3] => image123 [4] => image1231 )按照ASCII码排序Array ( [0] => Image102 [1] => Image1202 [2] => image120 [3] => image123 [4] => image1231 )按照ASCII码排序Array ( [0] => Image102 [2] => image120 [3] => image123 [1] => Image1202 [4] => image1231 )不区分大小写自然排序
sort 和natsort的比较:sort按位排序
<?php//image全是小写i $arr = ['image123','image102','image120','image1202','image1231']; echo '<pre>'; sort($arr); print_r($arr); echo '<hr>'; // 自然排序 natsort($arr); print_r($arr);
结果:
Array ( [0] => image102 [1] => image120 [2] => image1202 [3] => image123 [4] => image1231 ) Array ( [0] => image102 [1] => image120 [3] => image123 [2] => image1202 [4] => image1231 )
array_multisort -- 对多个数组或多维数组进行排序
<?php include 'db.php'; $sql = 'select regtime,username,money,email from bbs_user limit 3'; $data = select($sql); echo '<pre>'; // print_r($data); foreach($data as $v){ $email[] = $v['email']; $username[] = $v['username']; $regtime[]=$v['regtime']; } // print_r($email); // print_r($username); //多维数组排序 array_multisort($username,SORT_DESC,$regtime,SORT_ASC,$email,SORT_ASC,$data); print_r($data);
结果:
Array ( [0] => Array ( [regtime] => 1397632974 [username] => jackyok [money] => 100 [email] => jads@qq.com ) [1] => Array ( [regtime] => 1397632773 [username] => jack [money] => 100 [email] => 50377203@qq.com ) [2] => Array ( [regtime] => 1397633371 [username] => alibaba [money] => 100 [email] => 50377203@qq.com ) )
5、拆分、合并、分解与结合数组array_slice -- 从数组中取出一段
<?php $arr = ['a','b','c','d','e','f']; // $result = array_slice($arr,3); $result = array_slice($arr,-4,-1); var_dump($result); 结果:array(3) { [0]=> string(1) "c" [1]=> string(1) "d" [2]=> string(1) "e" }
array_splice -- 把数组中的一部分去掉并用其它值取代
<?php $arr = ['a','b','c','d','e','f']; // $brr = array_splice($arr,1,1,'x'); // $brr = array_splice($arr,1); // $brr = array_splice($arr,-1); // $brr = array_splice($arr,1,1); // $brr = array_splice($arr,1,-1); // $brr = array_splice($arr,-3,1); // $brr = array_splice($arr,-3,-1,['x','y']); $brr = array_splice($arr,-3,-1,array(array('a','b'))); echo '<pre>'; print_r($arr);echo '<hr>'; print_r($brr); 结果:Array( [0] => a [1] => b [2] => c [3] => Array ( [0] => a [1] => b ) [4] => f)Array( [0] => d [1] => e)
array_combine -- 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
<?php $arr = ['a','b','c','d']; $brr = ['huanggua','mangguo','taozi','boluo']; // 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 $crr = array_combine($arr,$brr); echo '<pre>'; print_r($crr);结果:Array( [a] => huanggua => mangguo [c] => taozi [d] => boluo)
array_merge -- 合并一个或多个数组
<?php $arr = [b]array('xiaorui',10=>'enzhu','jingjing','user1'=>'minghui','caojie'); $brr = array('zhangtao','hongli',10=>'fengtao','henian','user1'=>'haijing'); //合并一个或多个数组,键名同名的后面的会把前边的覆盖掉 $crr = array_merge($arr,$brr); echo '<pre>'; print_r($crr);结果:Array( [0] => xiaorui [1] => enzhu [2] => jingjing [user1] => haijing [3] => caojie [4] => zhangtao [5] => hongli [6] => fengtao [7] => henian)
array_intersect -- 计算数组的交集 array_diff -- 计算数组的差集
<?php $arr = array('xiaorui','enzhu','jingjing','haijing','caojie'); $brr = array('zhangtao','enzhu','fengtao','henian','haijing'); //获取多个数组交集 // $crr = array_intersect($arr,$brr); //获取多个数组差集 $crr = array_diff($arr,$brr); echo '<pre>'; print_r($crr);
6、数组与数据结构
<?php $brr = array('zhangtao','enzhu','fengtao','henian','haijing'); //将数组最后一个单元弹出 // $result = array_pop($brr); //将一个或多个单元压入数组的末尾(入栈) // $result = array_push($brr,'shenchao'); //将数组开头的单元移出数组 // $result = array_shift($brr); //在数组开头插入一个或多个单元 // $result = array_unshift($brr,array('cenghao','gaolaoshi')); echo '<pre>'; print_r($brr); print_r($result);
array_rand -- 从数组中随机取出一个或多个单元
<?php $arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]; // 从数组中随机取出一个或多个单元 $keys = array_rand($arr,3); print_r($keys); foreach($keys as $v){ echo $arr[$v].'<br>'; }shuffle -- 将数组打乱
<?php $arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]; //shuffle — 将数组打乱 shuffle($arr); print_r($arr); echo $arr[0].'<br>'; echo $arr[1].'<br>'; echo $arr[2]; //建立一个包含指定范围单元的数组 //第一个参数开始位置(最小值) 第二个参数结束位(最大值) 第三个参数步长 $brr = range(1,54,3); echo '<pre>'; print_r($brr);
来自为知笔记(Wiz)
相关文章推荐
- PHP数组的相关处理函数
- php数组相关处理函数(下)
- 数组相关处理函数
- php array数组的相关处理函数and str字符串处理与正则表达式
- jq 数组操作、事件处理和相关处理函数的使用
- 数组的相关处理函数
- php学习笔记(六)数组及其相关处理函数
- php数组的相关处理函数(上)
- PHP中处理处理数组相关函数
- 字符串相关(字符串数组,字符串处理相关函数、自实现函数)
- (34)数组的相关处理函数(上)(35)常用的数组相关操作函数(下)
- PHP数组的相关处理函数1
- PHP学习(十四)--数组的相关处理函数
- PHP数组的相关处理函数2
- 数组中的相关处理函数
- php数组的相关处理函数
- PHP数组操作相关的函数
- JS对时间的相关处理函数与应用
- strcat,strcpy,strcmp,strlen4个常用字符串处理函数的数组与指针简单实现方法~
- delphi路径分割符处理相关函数