我想按照自定义顺序对数组中的目录列表进行排序。
我确实尝试过使用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);
答案 0 :(得分:0)
usort是根据用户定义函数排序数组的函数。 如果我们谈论排序数组的基本概念,数组排序总是匹配数组的两个成员,以查看哪一个大于或小于或等于,因此,$ a,$ b是$ dir_list数组的两个成员(可能在任何索引)将在任何迭代迭代时进行比较。
new关键字用于从父作用域继承变量。就像上面的例子一样,你需要使用$ order但$ order是在匿名函数之外定义的,所以使用关键字来导入匿名函数范围内的$ order变量。