我有这个数组:
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中找到的功能,但是还没有设法对它进行排序。
我无法通过第一级。
由于 塞巴斯蒂安
答案 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
)
)