1

我正在关注这个线程如何在 PHP 中对数组和数据进行排序?

我想根据另一个一维数组对二维数组进行排序

我要排序的数组

$main = array(array('name' => 'terry', 'age' => '25', 'sex' => 'm', 'status' => 'active'),
        array('name' => 'raul', 'age' => '26', 'sex' => 'm', 'status' => 'active'),
        array('name' => 'mata', 'age' => '27', 'sex' => 'm', 'status' => 'active'),
        array('name' => 'ronaldo', 'age' => '28', 'sex' => 'm', 'status' => 'active'),
        array('name' => 'drogba', 'age' => '29', 'sex' => 'm', 'status' => 'active'),
        array('name' => 'messi', 'age' => '30', 'sex' => 'm', 'status' => 'active'));

顺序数组

$order = array('30','25');

function cmp(array $a, array $b) {
    global $order;

    return array_search($a['age'], $order) - array_search($b['age'], $order);
}
usort($main, 'cmp');

这是我正在尝试的功能。但它没有对数组进行排序。

所需的输出:我想将年龄值为 30 和 25 的数组作为输入二维数组中的前两个数组

我可以用这段代码做到这一点

function cmp(array $a, array $b) {
    global $order;
   foreach ($order as $ord) {
        if (in_array($ord, $a)) {
        return true;
    }
    }
}

但我想避免 foreach 循环

4

1 回答 1

1

试试这个:

$inArray = array(30, 25);
uasort($main, function($a, $b) use ($inArray){ 
    $aAge = $a['age'];
    $bAge = $b['age'];
    $aWeight = 0;
    $bWeight = 0;
    if (in_array($aAge, $inArray)) 
        $aWeight++;

    if (in_array($bAge, $inArray)) 
        $bWeight++;

    if ($aWeight != $bWeight) {
        return $aWeight > $bWeight ? -1 : 1;
    } else if ($aWeight > 0) {
        // need to sort by order which specified in array
        $aIndex = array_search($aAge, $inArray);
        $bIndex = array_search($bAge, $inArray);
        return ($aIndex == $bIndex ? 0 : ($aIndex > $bIndex ? 1 : -1));
    } else {
        // just compare age values
        return ($aAge == $bAge ? 0 : ($aAge > $bAge ? 1 : -1));
    }
});
于 2013-11-10T18:45:55.320 回答