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. SQL Server ->> Memory Allocation Mechanism and Performance Analysis(内存分配机制与性能分析)之 -- Minimum server memory与Maximum server memory

    Minimum server memory与Maximum server memory是SQL Server下配置实例级别最大和最小可用内存(注意不等于物理内存)的服务器配置选项.它们是管理SQL S ...

  2. SVNKit学习——基于Repository的操作之print repository tree、file content、repository history(四)

    此篇文章同样是参考SVNKit在wiki的官方文档做的demo,每个类都可以单独运行.具体的细节都写到注释里了~ 开发背景: SVNKit版本:1.7.14 附上官网下载链接:https://www. ...

  3. FQDN说明

    以下摘自百度百科: FQDN:(Fully Qualified Domain Name)完全合格域名/全称域名,是指主机名加上全路径,全路径中列出了序列中所有域成员.全域名可以从逻辑上准确地表示出主机 ...

  4. QT的lineidet的光标问题

    http://blog.csdn.net/Howard_Liu1314/article/details/10456165

  5. HDU 3420 -- Bus Fair ACM

    Bus Fair Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  6. Apache PredictionIO在Docker上的搭建及使用

    1.Apache PredictionIO介绍 Apache PredictionIO 是一个孵化中的机器学习服务器,它可以为为开发人员和数据科学家创建任何机器学习任务的预测引擎.官方原文: Apac ...

  7. 条件独立(conditional independence) 结合贝叶斯网络(Bayesian network) 概率有向图 (PRML8.2总结)

    转:http://www.cnblogs.com/Dzhouqi/p/3204481.html本文会利用到上篇,博客的分解定理,需要的可以查找上篇博客 D-separation对任何用有向图表示的概率 ...

  8. wampserver的安装与配置

    一.安装:wamp的安装很简单,只需要按照提示并根据自己的需求操作即可,这里不再赘述. 二.配置:wamp安装完后,需进行如下配置才能正常工作. 1.修改MySQL的登录密码 (1)启动WampSer ...

  9. 关于PHP数组你应该知道的事情

    (1).PHP数组的遍历顺序 先举个栗子: <?php $arr['a'] = '123'; $arr['b'] = '456'; $arr['c'] = '789'; foreach($a a ...

  10. python SQL注入测试脚本(更新中)

    import requests import json import warnings warnings.filterwarnings("ignore") url = 'https ...