假设我正在尝试对名为$ off的数组进行排序,看起来像这样
Array
(
[0] => Array
(
[name] => alistair
[id] => 344
)
[1] => Array
(
[name] => barney
[id] => 333
)
[2] => Array
(
[name] => carlos
[id] => 100
)
我想对它进行排序,使其始终按此顺序排列:“carlos,alistair,barney”,如果名称不在排序中,则不会在数组中。我知道我必须使用usort但我不知道如何做一个cmp。我也使用子php5版本,所以我不能使用匿名函数。最简单的方法是什么?
答案 0 :(得分:0)
$arr = array(
array('name' => 'alistair', 'id' => 344),
array('name' => 'barney', 'id' => 333),
array('name' => 'carlos', 'id' => 100),
);
$order = array(1 => 'carlos', 'alistair', 'barney');
usort($arr, function($a, $b) use($order) {
$a_index = array_search($a['name'], $order);
if (!$a_index) {
$a_index = 999;
}
$b_index = array_search($b['name'], $order);
if (!$b_index) {
$b_index = 999;
}
return $a_index - $b_index;
});
var_dump($arr);
以php4友好的方式相同:
$arr = array(
array('name' => 'alistair', 'id' => 344),
array('name' => 'barney', 'id' => 333),
array('name' => 'carlos', 'id' => 100),
);
usort($arr, 'sorting_function');
function sorting_function($a, $b)
{
$order = array(1 => 'carlos', 'alistair', 'barney');
$a_index = array_search($a['name'], $order);
if (!$a_index) {
$a_index = 999;
}
$b_index = array_search($b['name'], $order);
if (!$b_index) {
$b_index = 999;
}
return $a_index - $b_index;
}
var_dump($arr);