关联数组中特定键的array_count_values

时间:2016-12-15 02:59:56

标签: php arrays

我们说我有一个这样的数组:

Array
(
    [id] => 1
    [color_object] => blue
    [color_1] => green
    [color_2] => blue
    [color_3] => blue
    [color_4] => red
    [color_5] => purple
    [AltColor] => blue
)

我可以使用array_count_values,它会将blue计为4

但是我只需要计算数组中特定键的值,在这个例子中我需要将我的计数限制为color_1 color_2 color_3 color_4和仅color_5

是否可以仅计算指定键中blue的实例,为我提供2所需的结果?

PHP代码:

$array = array("id"=>"1", "color_object"=>"blue", "color_1"=>"green", "color_2"=>"blue", "color_3"=>"blue", "color_4"=>"red", "color_5"=>"purple", "AltColor"=>"blue");

2 个答案:

答案 0 :(得分:2)

<?php

    $array = array(
        "id"=>"1",
        "color_object"=>"blue",
        "color_1"=>"green",
        "color_2"=>"blue",
        "color_3"=>"blue",
        "color_4"=>"red",
        "color_5"=>"purple",
        "AltColor"=>"blue"
    );

    $preg = '/^color_\d{1,}/i';

    $callback = function ($val) use($preg) {
        if (preg_match($preg, $val, $match)) {
            return true;
        } else {
            return false;
        }   
    };

    $data = array_filter($array, $callback, ARRAY_FILTER_USE_KEY);
    $result = array_count_values($data);

    var_dump($result);

答案 1 :(得分:1)

你可以使用函数array_sumarray_map包装在其中以仅添加返回索引 符合你的条件

$array = Array
(
    'id' => 1,
    'color_code' => 'blue',
    'color_1' => 'green',
    'color_2' => 'blue',
    'color_3' => 'blue',
    'color_4' => 'red',
    'color_25' => 'purple',
    'AltColor' => 'blue',
);

echo "The total count is of index => color and value => blue is ".array_sum(array_map(
    function($value, $key) {
        return (preg_match('/^color_\d{1,}/i', $key) && $value == 'blue') ? true : false;
    }, $array, array_keys($array))
);

Demo