1. array_column 返回输入数组中某个单一列的值。
2. array_filter 用回调函数过滤数组中的元素。
3. array_map 将用户自定义函数作用到给定数组的每个值上,返回新的值。
4. array_walk_recursive 对数组中的每个成员递归地应用用户函数。
5. extract (从数组中将变量导入到当前的符号表),  compact (创建一个包含变量名和它们的值的数组)
6. uasort 使用用户自定义的比较函数对数组中的键值进行排序。

1. array_column 返回输入数组中某个单一列的值。

类似功能有

1.1) Yii2 中的 ArrayHelper::index($array, 'id');

1.2) Yii2 中的 $query->select(['last_name', 'id'])->indexBy('id')->column();

 // 可能从数据库中返回数组
$a = array(
array(
'id' => 5698,
'first_name' => 'Peter',
'last_name' => 'Griffin',
),
array(
'id' => 4767,
'first_name' => 'Ben',
'last_name' => 'Smith',
),
array(
'id' => 3809,
'first_name' => 'Joe',
'last_name' => 'Doe',
)
); $last_names = array_column($a, 'last_name', 'id');
print_r($last_names); 输出结果:
Array
(
[5698] => Griffin
[4767] => Smith
[3809] => Doe
)

2. array_filter 用回调函数过滤数组中的元素。

 function test_odd($var)
{
return($var & 1);
} $a1=array("a","b",2,3,4);
print_r(array_filter($a1,"test_odd")); 输出:
Array
(
[2] => 2
[3] => 3
[4] => 4
)

3. array_map 将用户自定义函数作用到给定数组的每个值上,返回新的值。

此函数有点类似与 array_walk_recursive , 只是多写了一步递归

 function myfunction($v) {
if (is_array($v)) {
return array_map("myfunction", $v);
}
return($v * $v);
} $a = array(1, 2, 3, 4, 5, 6 => [2, 3]);
print_r(array_map("myfunction", $a)); 输出:
Array
(
[0] => 1
[1] => 4
[2] => 9
[3] => 16
[4] => 25
[6] => Array
(
[0] => 4
[1] => 9
) )
 function myfunction($v1, $v2) {
if ($v1 === $v2) {
return "same";
}
return "different";
} $a1 = array("Horse", "Dog", "Cat");
$a2 = array("Cow", "Dog", "Rat");
print_r(array_map("myfunction", $a1, $a2)); 输出:
Array
(
[0] => different
[1] => same
[2] => different
)

4. array_walk_recursive 对数组中的每个成员递归地应用用户函数。

此函数有点类似与 array_map, 只是省去了写递归

 function myfunction(&$value, $key, $p) {
if ($value == 'xxx') {
$value = $p;
}
} $a = array("a" => "red", "b" => "green", "c" => "blue", 'd' => ['x' => 'xxx', 'y' => 'yyy']);
array_walk_recursive($a, "myfunction", 'green');
print_r($a); 输出:
Array
(
[a] => red
[b] => green
[c] => blue
[d] => Array
(
[x] => green
[y] => yyy
) )

5. extract (从数组中将变量导入到当前的符号表),  compact (创建一个包含变量名和它们的值的数组)

 $a = "Original";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c"; 输出:
$a = Cat; $b = Dog; $c = Horse
 $firstname = "Peter";
$lastname = "Griffin";
$age = "41"; $result = compact("firstname", "lastname", "age"); print_r($result); 输出:
Array
(
[firstname] => Peter
[lastname] => Griffin
[age] => 41
)

6. uasort 使用用户自定义的比较函数对数组中的键值进行排序(可以对二维数组排序)。

类似功能实现: 冒泡排序

$arr2 = [
[
'id' => 3,
'age' => 33,
],
[
'id' => 2,
'age' => 44,
],
[
'id' => 1,
'age' => 22,
],
[
'id' => 11,
'age' => 22,
],
]; //按age字段升序排序
$field = 'age';
uasort($arr2, function($a, $b) use ($field) {
if ($a[$field] == $b[$field]){
return 0;
}
return ($a[$field] < $b[$field]) ? -1 : 1;
});
print_r($arr2); 输出结果:
Array
(
[2] => Array
(
[id] => 1
[age] => 22
) [3] => Array
(
[id] => 11
[age] => 22
) [0] => Array
(
[id] => 3
[age] => 33
) [1] => Array
(
[id] => 2
[age] => 44
) )

快速排序实现:

 /**
* 多维数组快速排序
* @param type $arr
* @param type $field
* @return type
*/
function manyArrayQuickSort($arr, $field, $desc=false){
$length = count($arr);
if($length <= 1){
return $arr;
}
$baseArr = $arr[0];
$baseNum = is_string($baseArr[$field]) ? ord($baseArr[$field]) : $baseArr[$field];
$leftArr = array();
$rightArr = array();
for($i=1; $i<$length; $i++){
$temp = is_string($arr[$i][$field]) ? ord($arr[$i][$field]) : $arr[$i][$field];
if($desc){
if($baseNum < $temp){
$leftArr[] = $arr[$i];
}else{
$rightArr[] = $arr[$i];
}
}else{
if($baseNum > $temp){
$leftArr[] = $arr[$i];
}else{
$rightArr[] = $arr[$i];
}
}
} $leftArr = manyArrayQuickSort($leftArr, $field);
$rightArr = manyArrayQuickSort($rightArr, $field); return array_merge($leftArr, array($baseArr), $rightArr);
}
$res = manyArrayQuickSort($arr2, 'age');
print_r($res); 输出结果:
Array
(
[0] => Array
(
[id] => 1
[age] => 22
) [1] => Array
(
[id] => 3
[age] => 33
) [2] => Array
(
[id] => 2
[age] => 44
) )

这时候我们会发现两者的不同, 一维数组的key键值

uasort 一维数组的键值不变: 2,3,0,1
manyArrayQuickSort 一维数组的键值重新索引了: 0,1,2,3

六个比较好用的php数组Array函数的更多相关文章

  1. php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】

    本文实例总结了php常用数组array函数.分享给大家供大家参考,具体如下: array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 案例: <?php ...

  2. R语言数组array函数

    数组是一个可以在两个以上的维度存储数据的R数据对象.例如 - 如果创建尺寸(2,3,4)的数组,那么创建4个矩形矩阵每2行3列.数组只能存储数据类型. 使用 array()函数创建数组.它需要向量作为 ...

  3. PHP常用数组(Array)函数整理

    整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数.数组的分段和填充.数组与栈.数组与列队.回调函数.排序.计算.其他的数组函数等. 一.数组操作的基本函数 数组的键名和值 array_va ...

  4. 【PHP】PHP常用数组(Array)函数整理

    整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数.数组的分段和填充.数组与栈.数组与列队.回调函数.排序.计算.其他的数组函数等. 一.数组操作的基本函数 数组的键名和值 array_va ...

  5. C#高级编程 (第六版) 学习 第五章:数组

    第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...

  6. PHP数组常用函数

    [官方]PHP Array 函数 一.数组操作的基本函数 数组的键名和值 array_values($arr);  获得数组的值 array_keys($arr);  获得数组的键名 array_fl ...

  7. PHP中的数组(二)常用数组处理函数

    数组的相关处理函数    一.数组键/值操作有关的函数        1.array_values()   无论是关联的还是索引的返回的都是索引数组 <?php $lamp=array(&quo ...

  8. PHP:第四章——PHP数组处理函数

    <pre> <?php //数组处理函数 header("Content-Type:text/html;charset=utf-8"); //compact(); ...

  9. JavaScript 数组操作函数--转载+格式整理

    JavaScript 数组操作函数(部分)--转载+格式整理 今天看了一篇文章,主要讲的对常用的Js操作函数:push,pop,join,shift,unshift,slice,splice,conc ...

随机推荐

  1. BASE64编码的字符进行URL传输丢失特殊字符的问题

    因为BASE64的编码里含有“+”号等特殊字符,在url传输的时候会把+号编程空格,解决这个问题的方法: 请求时把BASE64编码进行url的编码再进行传输 接收时把BASE64编码进行url的解码 ...

  2. 天诛进阶之D算法 #3700

    http://mp.weixin.qq.com/s/ngn98BxAOLxXPlLU8sWH_g 天诛进阶之D算法 #3700 2015-11-24 yevon_ou 水库论坛 天诛进阶之D算法 #3 ...

  3. 华为手机在开发Android调试时logcat不显示输出信息的解决办法

    手机连接电脑RUN AS logcat 提示:Unable to open log device '/dev/log/main': No such file or directory 信息 本人华为C ...

  4. GCC the GNU

         GCC简单使用 -v/-v/--version 查看gcc版本号 python@ubuntu:~$ gcc -v -I 指定头文件目录,注意-I和之间没有空格 1 #include<s ...

  5. 配置管理SVN软件具体操作

    配置管理(SVN) CM:configuration management  配置管理人员 什么是SVN SVN --Subversion --是一个开放源代码的版本控制系统 --时下流行的有SVN和 ...

  6. ERP系统架构

    分布式.服务化的ERP系统架构设计 ERP之痛 曾几何时,我混迹于电商.珠宝行业4年多,为这两个行业开发过两套大型业务系统(ERP).作为一个ERP系统,系统主要功能模块无非是订单管理.商品管理.生产 ...

  7. mac环境下安装posgreSQL,postGIS,pgrouting方法

    费了九牛二虎之力,终于安装成功...都是mac的坑,好好的window环境多好,非要换mac环境,导致软件配置极其的麻烦,window的环境下配置会少很多事,自己惹的祸自己担着吧还是.换mac要慎重, ...

  8. 谈谈hashcode和equals的用法

    HASH: Hash是散列的意思,就是把任意长度的输入,通过散列算法变换成固定长度的输出,该输出就是散列值.关于散列值,有以下几个关键结论: 1.如果散列表中存在和散列原始输入K相等的记录,那么K必定 ...

  9. JSON解析问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/quanqinayng/article/details/25121955 这是data.chatFil ...

  10. ADF系列-1.EO的各个属性初探

    ADF中的EO可以看做关系型数据库中表的java展现形式. 1.Type 此处的Type是java的类型,而需要映射的是数据库的类型,两者之间存在一些差异,各个映射关系如下: 数据库列类型 BC 属性 ...