让我说我有这样的阵列:
$array = Array(
Array('a' => 'v', 'b' => 's', 'c' =>'s'),
Array('c'=>'s', 'd'=>'s', 'b'=>'s'),
Array('b'=>'s', 'e'=>'s', 'g'=>'s'),
);
我想创建一个新数组,其中包含我的数组中有多少相同的键。例如:
$result = Array('a'=>1, 'b'=>3, 'c'=>2, 'd'=>1, 'e'=>1, 'g'=>1);
我尝试使用array_count_values,但这不是一个好主意。
请帮帮我
答案 0 :(得分:1)
对答案进行一些更正和补充。
$newArray = Array();
foreach ($array as $values) {
foreach ($values as $key => $value) {
if (!isset($newArray[$key]))
$newArray[$key] = 0; // create new 0 element
$newArray[$key]++;
}
}
其他功能方法
$result = array_count_values( // 3. count values
call_user_func_array('array_merge', // 2. merge array of keys
array_map('array_keys', $array))); // 1. convert inner array to array with keys
var_dump($result);
第二个,只需用array_map
$result = array();
array_map(function($inner_array)use(&$result)
{
array_map(function($key)use(&$result)
{
$value = &$result[$key]; // reference trick
$value++;
}, array_keys($inner_array));
}, $array);
var_dump($result);
第三个,使用array_reduce
$result = array_count_values(
array_reduce($array, function($result, $inner_array)
{
return array_merge($result, array_keys($inner_array)); // merge arrays one by one
}, []));
var_dump($result);
答案 1 :(得分:0)
我这样做,它有效,但我想知道是否存在另一种方法:
$newArray = Array();
foreach ($array as $values) {
foreach ($values as $key => $value) {
$newArray[$key]++;
}
}