六个比较好用的php数组Array函数
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函数的更多相关文章
- php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
本文实例总结了php常用数组array函数.分享给大家供大家参考,具体如下: array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 案例: <?php ...
- R语言数组array函数
数组是一个可以在两个以上的维度存储数据的R数据对象.例如 - 如果创建尺寸(2,3,4)的数组,那么创建4个矩形矩阵每2行3列.数组只能存储数据类型. 使用 array()函数创建数组.它需要向量作为 ...
- PHP常用数组(Array)函数整理
整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数.数组的分段和填充.数组与栈.数组与列队.回调函数.排序.计算.其他的数组函数等. 一.数组操作的基本函数 数组的键名和值 array_va ...
- 【PHP】PHP常用数组(Array)函数整理
整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数.数组的分段和填充.数组与栈.数组与列队.回调函数.排序.计算.其他的数组函数等. 一.数组操作的基本函数 数组的键名和值 array_va ...
- C#高级编程 (第六版) 学习 第五章:数组
第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...
- PHP数组常用函数
[官方]PHP Array 函数 一.数组操作的基本函数 数组的键名和值 array_values($arr); 获得数组的值 array_keys($arr); 获得数组的键名 array_fl ...
- PHP中的数组(二)常用数组处理函数
数组的相关处理函数 一.数组键/值操作有关的函数 1.array_values() 无论是关联的还是索引的返回的都是索引数组 <?php $lamp=array(&quo ...
- PHP:第四章——PHP数组处理函数
<pre> <?php //数组处理函数 header("Content-Type:text/html;charset=utf-8"); //compact(); ...
- JavaScript 数组操作函数--转载+格式整理
JavaScript 数组操作函数(部分)--转载+格式整理 今天看了一篇文章,主要讲的对常用的Js操作函数:push,pop,join,shift,unshift,slice,splice,conc ...
随机推荐
- keepalived+MySQL双主搭建
keepalived+MySQL双主搭建过程 首先要简单了解一下keepalived: Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,H ...
- React - React Developer Tools开发者工具的安装与使用(Chrome调试插件)
原文地址:http://www.cnplugins.com/zhuanti/how-to-use-react-tools.html 虽然我们曾经在React开发者工具的基础介绍里面有概括性的介绍过Re ...
- Day04——Python模块
一.模块简介 模块是实现了某个功能的代码集合,比如几个.py文件可以组成代码集合即模块.其中常见的模块有os模块(系统相关),file模块(文件操作相关) 模块主要分三类: 自定义模块 :所谓自定义模 ...
- JDK/bin下工具列表说明
JDK/bin下工具列表说明 appletviewer.exe:一种执行HTML文件上的Java小程序类的Java浏览器 apt.exe:注解处理工具(Annotation Processing To ...
- IONIC调用原生的等待对话框
ngCordova提供了progressIndicator插件,用以方便的显示等待对话框,但是目前版本仅支持安卓版本.为了让苹果版本也显示,可以到以下地址下载通用的插件,JS部分的代码无需改变: ht ...
- js 获取 网页屏幕高度 窗口高度 元素高度 滚动高度
常用: JS 获取浏览器窗口大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // 获取窗口宽度 if (window.innerWidth) winWidth = ...
- linux(centos、ubuntu)网卡配置文件不生效
今天遇到个问题,服务器上ifcfg配置了eth0文件,但是通过ifcfg命令检查发现网卡IP配置并未生效. 然后通过如下配置修正: ubuntu: # vim /etc/default/grub在”G ...
- yii2.0中url重写实现方法
在yii框架里有前台和后台页面,举例前台url重写. 控制器与路由 控制器以Controller作为后缀,继承自yii\web\Controller; 动作以action作为前缀,public访问修饰 ...
- SAP HANA Delivery Unit概念简述
介绍 在SAP HANA应用开发领域里,我们通常用package来存储modeler views和XS工程等模型.这些包应该被部署到最终的生产服务器上. Delivery Unit是SAP HANA原 ...
- IE11,Chrome65,Firefox58 的webdriver驱动下载,调用浏览器打开网址
一.环境及需求 1.1环境 Windows10 + Python 3.6.4 + selenium 3.141 1.2需求 工作需要实现一个网页自动登录的操作,决定使用selenium+python实 ...