当前位置: 首页 > PHP > 数组操作函数 array_filter array_map array_walk usort array_multisort

数组操作函数 array_filter array_map array_walk usort array_multisort

  • 分类:PHP
  • 本文标签: 数组 排序
  • 发布时间:2015-09-17 15:06:23
  • 作者:Ferman
  • 查看数: 237

       这几个函数只是增加开发的效率,使代码看起来不会那么low,当然下面的例子很简单,但是用了这些函数后就会看着比较巧妙,其实效率也没提升多少,它的原理也是循环,只是你不用写而已。你也可以不用这些函数,因为用循环也是非常简单的。

下面给出这几个函数的几个例子,先给出实验数组

$userList = array(
    array('name'=>'张三', 'age'=>20, 'sex'=>'女'),
    array('name'=>'李四', 'age'=>24, 'sex'=>'男'),
    array('name'=>'王五', 'age'=>23, 'sex'=>'女'),
    array('name'=>'赵六', 'age'=>21, 'sex'=>'男'),
);

一、array_filter()函数

顾名思义就是过滤数组。利用array_filter和回调函数 对性别为女的数据进行过滤

function noWomen($m) {
    return $m['sex'] == '女' ? false : true;
}
var_dump(array_filter($userList, 'noWomen'));

二、array_map()和array_walk()函数区别与用法

这两个函数都可以对数组内的值进行自循环操作,不同的是,array_map()是直接对数组内每个值进行操作,即改变的就是原来的数组,所以在传参的时候要传地址符。array_walk()是对传入的数组操作后返回新的数组下面这个例子就是用array_map()和array_walk()这两个函数,将性别为男的年龄加2

方法1.使用array_walk()(注意自定义函数中的地址符)

function ageAdd(&$m) {
    $m['age'] += $m['sex'] == '男' ? '2' : '0';
}
array_walk($userList, 'ageAdd');
var_dump($userList);

方法2.使用array_map()(不用传递地址符,但是注意自定义方法中有return 值,而且参数的顺序也是不一样的这一点呢,可以得出在官方这两个函数不是同一个人写的-_-)

function ageAdd1($m) {
    $m['age'] += $m['sex'] == '男' ? '2' : '0';
    return $m;
}
var_dump(array_map('ageAdd1', $userList));

三、usort()和array_multisort()函数区别与用法

php中有很多对数组进行排序的函数,开发起来非常方便,但是也有可能不合意,所以有usort()这个函数可以回调一个自定义的函数,还有一个专门对多个或多维数组进行排序的函数array_multisort(),多个用其他函数也可以实现,这里主要介绍多维。接下来就用这两个函数来实现对上面的二维数组中年龄值从大到小排序。

方法1.使用usort()进行排序

function mySort($a, $b) {
    return $a['age'] < $b['age'] ? 1 : -1;
}
usort($userList, 'mySort');

方法2.使用array_multisort()函数进行排序

这里只是简单的用法,还可以对多个字段进行排序,就像mysql里的order by name,age。意思就是先按name排序,如果name相同则按age排序.

foreach($userList as $key=>$val) {
    $sort[$key] = $val['age'];
}
array_multisort($sort, SORT_DESC, $userList);

到这里就介绍完了,这是之前自己的笔记,用的时候看一下其实蛮好用的。


转载时请以 超链接的形式 注明:转自Ferman

                  

About me