PHP array_count_values отсортированный многомерный массив

0

У меня есть этот массив:

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, но даже не смог их отсортировать.

Я не могу пройти первый уровень.

Благодаря Себастьяну

Теги:
arrays
multidimensional-array

2 ответа

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
        )
)
  • 0
    Я всегда думаю, что array_map ключи массива ... Спасибо :)
  • 0
    Ваш массив не отсортирован, как хотел OP. Так что разберитесь и ваш ответ в порядке!
Показать ещё 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
        )

)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню