1

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

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

下面我展示了 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
                )
        )

)
4

5 回答 5

2

使用RecursiveArrayIterator的简单解决方案,因此您不必关心尺寸:

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

$counter = 0
foreach ($iterator as $key => $value) {
  if ($key == 'profile_type' && $value == 'p') {
    $counter++;
  }
}
echo $counter;
于 2012-04-25T12:16:27.497 回答
0

嗨,您可以从多维数组中获取 profuke_type==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);
        }
    }

尝试这个..

谢谢

于 2012-04-25T13:20:47.123 回答
0

您还可以使用 array_walk($array,"test") 并定义一个函数“test”,该函数检查数组的每个项目的“类型”并递归调用 array_walk($arrayElement,“test”) 以获取“数组”类型的项目, 否则检查条件。如果条件满足,则增加一个计数。

于 2012-04-25T13:00:02.203 回答
0

像这样的东西可能会起作用......

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

$solution = array_count_values($counts);
于 2012-04-25T12:15:25.800 回答
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);
于 2012-04-25T12:15:44.723 回答