php中不同键的值计数

时间:2014-08-27 07:40:05

标签: php arrays

我有一个PHP代码,其中我有一个带键和值对的关联数组。 数组采用以下格式。

$info = array();

$info[0] = array(
    'name1' => 'type1',
    'count' => '27'
    );

$info[1] = array(
    'name1' => 'Type2',
    'count' => '11'
    );

$info[2] = array(
    'name1' => 'Type1',
    'count' => '5'
    );

$info[3] = array(
    'name1' => 'Type1',
    'count' => '12'
    );

$info[4] = array(
    'name1' => 'type2',
    'count' => '10'
    );

我需要一个输出,其中我将得到type1和type2的计数,分别为44和22,这将来自array的count键。所以我需要像type1这样的不同键的值发生两次,所以我需要类似type1和类型2有计数..请指导我如何追求......

foreach($count as $array){
echo $array;
}

3 个答案:

答案 0 :(得分:1)

最明显的解决方案是迭代数组:

$counts = array();

foreach($info as $elem){
    $counts[$elem['name1']] += $elem['count'];
}

var_dump($counts);

如果您希望type1Type1成为相同的密钥(不区分大小写),您可以执行以下操作:

    foreach($info as $elem){
            $counts[strtolower($elem['name1'])] += $elem['count'];
    }

答案 1 :(得分:0)

$new   = array();

foreach ($info as $v)
{
    // Normalize the key names
    $key = ucfirst($v['name1']);

    if (isset($new[$key]))
    {
        $new[$key] += $v['count'];
    }
    else
    {
        $new[$key] = $v['count'];
    }
}

...所以print_r($new);会给你这个:

Array
(
    [Type1] => 44
    [Type2] => 21
)

答案 2 :(得分:0)

这是我的看法。

function getTypeArray($arr, $type) {
    return array_filter($arr, function($item) use($type) {
        return strtolower($item['name1']) == $type;
    });
}

function sumArray($arr) {
    return array_sum(array_map(function($item) {
        return $item['count'];
    }, $arr));
}

$type1_count = sumArray(getTypeArray($info, 'type1'));
$type2_count = sumArray(getTypeArray($info, 'type2'));
print 'Type1: '.$type1_count;
print 'Type2: '.$type2_count;