0

假设我正在尝试对一个名为 $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 版本,所以我不能使用匿名函数。最简单的方法是什么?

4

1 回答 1

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);
于 2013-04-02T22:53:46.923 回答