PHP计算多维数组中的重复键

时间:2014-11-26 07:57:07

标签: php arrays

让我说我有这样的阵列:

$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,但这不是一个好主意。

请帮帮我

2 个答案:

答案 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]++;  
    }
}