我需要使用本机调用通过自定义键对关联数组进行排序。
实施例
array(
array('name' => 'abc', 'priority' => 5),
array('name' => 'def', 'priority' => 7),
array('name' => 'ghi', 'priority' => 2)
);
需要使用priority
键对内部数组进行排序。这样做是这样的:
usort($myArray, function($a, $b) {
return $a['priority'] - $b['priority'];
});
但是,我想创建一个如下所示的函数:
function sort_array_by_inner_key($array, $key) {
usort($array, function($a, $b){
return $a[$key] - $b[$key];
});
return $array;
}
显然,$key
内的function($a, $b)
变量将为空,因为我们尚未对其进行分配。如何在比较函数中传递$key
?我显然可以使用自己的排序功能来完成此任务,但我想使用本机排序功能。
答案 0 :(得分:2)
您需要在传递给use
的内部函数上使用usort
关键字。
来自文档(http://php.net/manual/en/functions.anonymous.php):
闭包还可以从父作用域继承变量。必须将任何此类变量传递给使用语言构造。
所以,试试这个:
function sort_array_by_inner_key($array, $key) {
usort($array, function($a, $b) use($key){
return $a[$key] - $b[$key];
});
return $array;
}
这将按预期工作。
如果你愿意,你甚至可以这样做:
function sort_array_by_inner_key(&$array, $key) {
usort($array, function($a, $b) use($key){
return $a[$key] - $b[$key];
});
}
现在sort_array_by_inner_key
会对其进行排序,而不是将其返回。
答案 1 :(得分:0)
suggesting little enhancement for dynamic key and order based sorting if anyone is looking for the same
public static function sort2DArrayByKey($array, $key , $order = 'ASC') {
usort($array, function($a, $b) use($key,$order){
if($order == "DESC") {
return $b[$key] - $a[$key];
}
else{
return $a[$key] - $b[$key];
}
});
return $array;
}