使用usort在php中自定义排序数组

时间:2014-02-25 06:36:49

标签: php arrays sorting usort

我想按照自定义顺序对数组中的目录列表进行排序。

我确实尝试过使用usort但是没有得到理想的结果。

我也希望你在usort中解释这里使用的$ a和$ b。

$dir    = '/tmp';

$dir_list=scan_dir($dir);

//now this $dir_list array for the sake of this example contains the following elements

$dir_list=array('dir1','dir2','newdir2','string1');

$order=array('newdir2','dir1','string1','dir2');

//all the values in both the arrays are strings.

我在这里找到了以下解决方案,但请解释$ a,$ b和关键字'use'的用途

usort($dir_list, function ($a, $b) use ($order) 
{

    $pos_a = array_search($a['id'], $order);

    $pos_b = array_search($b['id'], $order);

    return $pos_a - $pos_b;

});

var_dump($dir_list);

1 个答案:

答案 0 :(得分:0)

usort是根据用户定义函数排序数组的函数。 如果我们谈论排序数组的基本概念,数组排序总是匹配数组的两个成员,以查看哪一个大于或小于或等于,因此,$ a,$ b是$ dir_list数组的两个成员(可能在任何索引)将在任何迭代迭代时进行比较。

new关键字用于从父作用域继承变量。就像上面的例子一样,你需要使用$ order但$ order是在匿名函数之外定义的,所以使用关键字来导入匿名函数范围内的$ order变量。