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. redis在linux设置密码

    redis默认是没有密码的,如果需要设置可以这样设置. 1.找到本机的/etc/redis.conf 文件,找到如下行 #requirepass foobared 去掉前面的密码,并自己设置密码 re ...

  2. RMAN备份等级详解

    (2011-06-27 11:38:28) 转载▼ 标签: 杂谈 分类: oracle 在rman增量备份中,有差异增量和累积增量的概念 1.概念 差异增量:是备份上级及同级备份以来所有变化的数据块, ...

  3. Fatal error: Call to undefined function fnmatch() 解决

    我的PHP版本是5.6.30,linux 是CentOS 6.6,nginx,也不知啥问题,看了官方: https://secure.php.net/manual/en/function.fnmatc ...

  4. Spark 中的宽依赖和窄依赖

    Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage,而划分依据就是RDD之间的依赖关系.针对不同的转换函数,RDD之间的依赖关系分类窄依赖(narrow de ...

  5. February 1 2017 Week 5 Wednesday

    If you can't get a miracle, become one. 如果奇迹没有眷顾你,那就让自己变成奇迹吧. If you think you are bad luck, you did ...

  6. Github 删除 repository

    Github 删除 repository 如下图操作

  7. BZOJ2822:[AHOI2012]树屋阶梯(卡特兰数,高精度)

    Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为 ...

  8. BZOJ1770:[USACO]lights 燈(高斯消元,DFS)

    Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望. ...

  9. mxnet 神经网络训练和预测

    https://mxnet.incubator.apache.org/tutorials/basic/module.html import logging import random logging. ...

  10. 蓝牙BLE数据包格式汇总

    以蓝牙4.0为例说明: BLE包格式有:广播包.扫描包.初始化连接包.链路层控制包(LL层数据包).逻辑链路控制和自适应协议数据包(即L2CAP数据包)等: 其中广播包又分为:定向广播包和非定向广播包 ...