У меня есть этот массив:
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, но даже не смог их отсортировать.
Я не могу пройти первый уровень.
Благодаря Себастьяну
Используйте 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
)
)
Это должно сработать для вас:
<?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
)
)
array_map
ключи массива ... Спасибо :)