PHP array_count_values排序多维数组

时间:2014-12-13 18:01:57

标签: php arrays multidimensional-array

我有这个数组:

Array
(
    [LEVEL1] => Array
        (
            [0] => 18
            [1] => 12
            [2] => 16
            [3] => 12
            [4] => 12
        )

    [LEVEL2] => Array
        (
            [0] => 16
            [1] => 18
            [2] => 19
            [3] => 19
            [4] => 16
        )

)

我想按键排序小计。

Array
(
    [LEVEL1] => Array
        (
            [12] => 3
            [16] => 1
            [18] => 1
        )

    [LEVEL2] => Array
        (
            [19] => 2
            [16] => 2 (rectification on the sorting)
            [18] => 1
        )

)

我尝试了很多我在php.net中找到的功能,但是还没有设法对它进行排序。

我无法通过第一级。

由于 塞巴斯蒂安

2 个答案:

答案 0 :(得分:3)

使用array_map()& array_count_values()。例如:

$your_arr = Array(
    'LEVEL1' => Array(18,12,16,12,12),
    'LEVEL2' => Array(16,18,19,19,16,)
);

$keys = array_keys($your_arr);
$result = array_combine($keys, array_map(function($v, $k){
    $values = array_count_values($v);
    ($k == 'LEVEL1') ?  ksort($values) : krsort($values);
    return $values;
}, $your_arr, $keys));

print '<pre>';
print_r($result);
print '</pre>';

<强>输出:

Array
(
    [LEVEL1] => Array
        (
            [12] => 3
            [16] => 1
            [18] => 1
        )

    [LEVEL2] => Array
        (
            [19] => 2
            [18] => 1
            [16] => 2
        )
)

答案 1 :(得分:2)

这应该适合你:

<?php

    $array = array (
            "LEVEL1" => array (18, 12, 16, 12, 12),
            "LEVEL2" => array (16, 18, 19, 19, 16)
        );

    $newarray = array();

    foreach($array as $k => $v) {
        $newarray[$k] = array_count_values($array[$k]);
        if($k == "LEVEL1")
            ksort($newarray[$k]);
        elseif($k == "LEVEL2")
            krsort($newarray[$k]);
    }

    print_r($newarray);

?>

输出:

Array
(
    [LEVEL1] => Array
        (
            [12] => 3
            [16] => 1
            [18] => 1
        )

    [LEVEL2] => Array
        (
            [19] => 2
            [18] => 1
            [16] => 2
        )

)