按键值排序数组

时间:2012-03-18 17:12:42

标签: php arrays sorting

所以我有这个数组。

Array
(
    [0] => Array
        (
            [key_1] => something
            [type] => first_type
        )

    [1] => Array
        (
           [key_1] => something_else
           [type] => first_type
        )

    [2] => Array
        (
            [key_1] => something_else_3
            [type] => second_type
        )

    [3] => Array
        (
            [key_1] => something_else_4
            [type] => second_type
        )
)

我必须按照这样的模式按类型值排序:

first_type
second_type
first_type
second_type

我的问题是,我该怎么做?

非常感谢!

3 个答案:

答案 0 :(得分:6)

您需要将usort与自定义比较功能结合使用,以比较每个项目的key_1子键(您可以使用strcmp方便地执行此操作)。假设您不想更改结果数组的结构,它看起来像这样:

$arr = /* your array */
usort($arr, function($a, $b) { return strcmp($a['key_1'], $b['key_1']); });

答案 1 :(得分:0)

如果sort()及其相关替代方案不起作用,则必须使用usort()uasort()并使用自定义函数对此数组进行排序。

答案 2 :(得分:0)

所以我的工作方式如下:

function filter_by_value($array, $index, $value) { 
    if(is_array($array) && count($array) > 0)  { 
        foreach(array_keys($array) as $key){ 
            $temp[$key] = $array[$key][$index]; 
            if ($temp[$key] == $value){ 
                $newarray[$key] = $array[$key]; 
            } 
        } 
    } 
    return $newarray;
}
$array = /* array here */ 
$type1 = array_values(filter_by_value($array, 'type', '1'));
$type2 = array_values(filter_by_value($array, 'type', '2'));
$i = 1; $x = 1; $y = 1;
$sorted = array();
foreach ($array as $a) {
    if ($i % 2) {
        $sorted[$i-1] = $type1[$x-1];
        $x++;
    } else {
        $sorted[$i-1] = $type2[$y-1];
        $y++;
    }
    $i++;
}

在php.net上找到filter_by_value(),但我不记得在哪里,那不是我做的。 也许这不是最好的解决方案,但它的工作非常好。