我有一个PHP脚本,我使用usort()函数重新排列多维数组。
这是数组$ arr
的示例数组(print_r-output)Array
(
[3] => Array
(
[name] => Bjudningen
[grade] => 5
[grade_type] => calculated
[orgname] => LInvitation
[id] => 13975
)
[0] => Array
(
[name] => Coeur fidèle
[grade] => 3
[grade_type] => calculated
[orgname] => Coeur fidèle
[id] => 8075
)
[2] => Array
(
[name] => Dawsonpatrullen
[grade] => 5
[grade_type] => calculated
[orgname] => The Dawson Patrol
[id] => 13083
)
)
这是我的PHP脚本
function sort_movies($arr,$val){
function cmp($x, $y)
{
if ( $x[$val] == $y[$val] )
return 0;
else if ( $x[$val] < $y[$val] )
return -1;
else
return 1;
}
usort($arr, 'cmp');
return $arr;
}
$sorted = sort_movies($arr,"grade");
我希望能够在不同的子键(即名称,等级,ID)上对数组进行排序,但它不能像我上面那样工作。但是,如果我将排序电影功能中的$val
更改为值"grade"
,它确实有效,因此由于某种原因,它不允许我作为排序参数发送变量。
我做错了什么?
答案 0 :(得分:0)
可以通过发送子项索引(即成绩而不是子项名称)来尝试此操作。
答案 1 :(得分:0)
使用5.3你可以这样做:
function create_sort($key)
{
return function($x,$y) use($key)
{
return $x[$key] - $y[$key];
};
}
$sorter = create_sort('name');
usort($arr, $sorter);
答案 2 :(得分:0)
问题是$ val仅在函数sort_movies()的范围内可用,而不在cmp()的范围内。您需要将其声明为全局。这将把它拉到范围内,这样你就可以在cmp()函数中使用它。
function sort_movies($arr,$val){
function cmp($x, $y)
{
global $val; // <---------------------------------
if ( $x[$val] == $y[$val] )
return 0;
else if ( $x[$val] < $y[$val] )
return -1;
else
return 1;
}
usort($arr, 'cmp');
return $arr;
}
$sorted = sort_movies($arr,"grade");