PHP:计算数组中特定值的外观

时间:2012-04-25 12:07:31

标签: php arrays multidimensional-array

我想知道我是否可以解释一下。

我有一个多维数组,我想得到该数组中出现的特定值的计数

下面我展示了数组的片段。我只是检查 profile_type

所以我试图在数组中显示 profile_type 的计数

修改

抱歉,我忘了提一些东西,而不是它的主要内容,我需要 profile_type == p

的数量
Array
(
    [0] => Array
        (
            [Driver] => Array
                (
                    [id] => 4
                    [profile_type] => p                    
                    [birthyear] => 1978
                    [is_elite] => 0
                )
        )
        [1] => Array
        (
            [Driver] => Array
                (
                    [id] => 4
                    [profile_type] => d                    
                    [birthyear] => 1972
                    [is_elite] => 1
                )
        )

)

5 个答案:

答案 0 :(得分:2)

使用RecursiveArrayIterator轻松解决问题,因此您无需关心维度:

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

$counter = 0
foreach ($iterator as $key => $value) {
  if ($key == 'profile_type' && $value == 'p') {
    $counter++;
  }
}
echo $counter;

答案 1 :(得分:0)

这样的事可能有用......

$counts = array();
foreach ($array as $key=>$val) {
    foreach ($innerArray as $driver=>$arr) {
        $counts[] = $arr['profile_type']; 
    }
}

$solution = array_count_values($counts);

答案 2 :(得分:0)

我会做类似的事情:

$profile = array();
foreach($array as $elem) {
    if (isset($elem['Driver']['profile_type'])) {
        $profile[$elem['Driver']['profile_type']]++;
    } else {
        $profile[$elem['Driver']['profile_type']] = 1;
    }
}
print_r($profile);

答案 3 :(得分:0)

您也可以使用array_walk($ array,“test”)并定义一个函数“test”,它检查数组的每个项目是否为“type”,并为类型的项目递归调用array_walk($ arrayElement,“test”) 'array',否则检查条件。如果条件满足,则递增计数。

答案 4 :(得分:0)

您好您可以从多维数组中获取配置文件类型== p的计数

    $arr = array();
    $arr[0]['Driver']['id'] = 4;
    $arr[0]['Driver']['profile_type'] = 'p';
    $arr[0]['Driver']['birthyear'] = 1978;
    $arr[0]['Driver']['is_elite'] = 0;


    $arr[1]['Driver']['id'] = 4;
    $arr[1]['Driver']['profile_type'] = 'd';
    $arr[1]['Driver']['birthyear'] = 1972;
    $arr[1]['Driver']['is_elite'] = 1;

    $arr[2]['profile_type'] = 'p';
    $result = 0;
    get_count($arr, 'profile_type', 'd' , $result);
    echo $result;
    function get_count($array, $key, $value , &$result){
        if(!is_array($array)){
            return;
        }

        if($array[$key] == $value){
            $result++;
        }

        foreach($array AS $arr){
            get_count($arr, $key, $value , $result);
        }
    }

试试这个..

感谢