根据特定列在php中排序多维数组

时间:2015-02-06 12:47:29

标签: php sorting multidimensional-array

我想根据内部数组中的字段对多维数组进行排序,如下所示:

$result = array(
  array("first" => 1, "second" => 5),
  array("first" => 3, "second" => 8),
  array("first" => 6, "second" => 7),
  array("first" => 6, "second" => 1)
);

sort($result,"second");

/*
$result = array(
  array("first" => 6, "second" => 1),
  array("first" => 1, "second" => 5),
  array("first" => 6, "second" => 7),
  array("first" => 3, "second" => 8)
);
*/

在PHP中是否存在类似于预期排序功能的东西,还是我必须重新实现它?

2 个答案:

答案 0 :(得分:3)

这是一个非常简单的数组排序功能。

function sort_by_key($a, $subkey) {
    foreach($a as $k=>$v) {
        $b[$k] = strtolower($v[$subkey]);
    }
    asort($b);
    foreach($b as $key=>$val) {
        $c[] = $a[$key];
    }
    return $c;
}

你可以在你的情况下这样称呼它:

sort_by_key($result , 'second');

答案 1 :(得分:2)

使用usort来实现此目标

  

此函数将使用用户提供的比较函数按其值对数组进行排序。如果要排序的数组需要按一些非平凡的标准排序,则应使用此功能。

function cmp($a, $b) {
    if ($a['second'] == $b['second']) {
        return 0;
    }
    return ($a['second'] < $b['second']) ? -1 : 1;
}
usort($array, 'cmp');

你甚至可以排在第二个'第二个'和'第一个'第二个:)(如果“第二个”是相同的,则排在“第一个”)

function cmp($a, $b) {
    if ($a['second'] == $b['second']) {
        if ($a['first'] == $b['first']) {
            return 0;
        }
        return ($a['first'] < $b['first']) ? -1 : 1;
    }
    return ($a['second'] < $b['second']) ? -1 : 1;
}
usort($array, "cmp");