![v2-0a0772d4f16532777470a57c41d1405c_1440w.jpg?source=172ae18b](http://img-02.proxy.5ce.com/view/image?&type=2&guid=c714f46d-e92f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-0a0772d4f16532777470a57c41d1405c_1440w.jpg?source=172ae18b)
数组操作是开发中经常应用的,有些情况得到数组不太理想,就需要进行降维来简化数组结构。一下总结一些相应数组操作函数。
假设有下面一个二维数组:
$user = array(
'0' => array('id' => 100, 'username' => 'a1'),
'1' => array('id' => 101, 'username' => 'a2'),
'2' => array('id' => 102, 'username' => 'a3'),
'3' => array('id' => 103, 'username' => 'a4'),
'4' => array('id' => 104, 'username' => 'a5'),
);
第一类:想转成下面的一维数组
$result = array(100, 'a1', 101, 'a2', 102, 'a3', 103, 'a4', 104, 'a5');
可以使用下面几种数组函数
一、array_reduce()函数
$result = array_reduce($user, function ($result, $value) {
return array_merge($result, array_values($value));
}, array())
//因为array_merge函数会把相同字符串键名的数组覆盖合并,所以必须先用array_value取出值后再合并。
//如果第二维是数字键名,如:
$user = array(
'a' => array(100, 'a1'),
'b' => array(101, 'a2'),
'c' => array(102, 'a3'),
'd' => array(103, 'a4'),
'e' => array(104, 'a5'),
);
//那么直接这样就可以了:
$result = array_reduce($user, 'array_merge', array())
二、array_walk_recursive()函数
//用array_walk_recursive()函数就非常灵活,可以把任意维度的数组转换成一维数组。
$result = [];
array_walk_recursive($user, function($value) use (&$result) {
array_push($result, $value);
});
三、array_map()函数
//这个函数和array_reduce()函数相似
$result = [];
array_map(function ($value) use (&$result) {
$result = array_merge($result, array_values($value));
}, $user);
另外,也可以用array_walk
的方法,和foreach
循环的方法,原理和上面一样。
第二类:只想获取某一数组列的数据,例如只想获取’username‘列数据结果
$username = array('a1', 'a2', 'a3', 'a4', 'a5');
可以使用下面几种数组函数
一、array_column()函数
用PHP内置的array_column()函数是最简单的方法,限制是PHP版本必须是5.5.0及以上版本。
$username = array_column($user, 'username');
二、array_walk()函数
array_walk()函数使用用户自定义函数对数组中的每个元素做回调处理,实现当前功能的方法:
$username = array();
array_walk($user, function($value, $key) use (&$username){
$username[] = $value['username'];
});
三、array_map()函数
array_map()函数和array_walk()
作用类似,将回调函数作用到给定数组的单元上。
$username = array();
array_map(function($value) use (&$username){
$username[] = $value['username'];
}, $user);
array_map()函数还有一些变种用法,有兴趣的可以去查阅。但是都比较局限