【问题标题】:Counting occurrences of values per key in a multidimensional php array计算多维php数组中每个键值的出现次数
【发布时间】:2016-07-28 14:45:54
【问题描述】:

我正在寻求有关计算多维数组中值的一点帮助。

我有一个数组键,类似于“barrack obama” - 值将是一长串数字。

那么下一个数组键可能类似于“另一个名称”,值也将是一长串数字。

最多大约 10 个排列方式相似的数组键。

示例 var_dump:

array(10) { ["barack obama"]=> array(4260) { [0]=> string(2) "19" [1]=>    string(2) "92" [2]=> string(2) "27" [3]=> string(2) "55" [4]=> string(2) "56" [5]=> string(2) "57" [6]=> string(4) "1409" [7]=> string(4) "1384" [8]=> string(4) "1362" [9]=> string(4) "1345" [10]=> string(4) "1280" } 
 ["united states"]=> array(5886) { [0]=> string(2) "72" [1]=> string(2) "81" [2]=> string(2) "89" [3]=> string(2) "90" [4]=> string(2) "92" [5]=> string(2) "21" [6]=> string(2) "23" [7]=> string(2) "27" [8]=> string(2) "32" [9]=> string(2) "47" [10]=> string(2) "55" }

如何计算唯一值(数字)在我的数组键(名称)中出现的次数。

所以如果 55 在“巴拉克·奥巴马”和“美国”中都出现,那么它会得分 2。

理想情况下,我只想保留出现在一个或多个键中的值,但在我至少获得评分值之后,我可以处理它。

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    创建一个结果数组。然后迭代外部数组,在循环内部迭代子数组并相应地递增结果数组:

    $data = array(
        "barack obama"  =>  array(0,50,150,250,600,900,45,150,1050),
        "tom jones"     =>  array(80,120,150,75,250,80,1100,1900),
        "bob mugabe"    =>  array(50,120,10,0,250,900,600,45,1000,1010),
    );    
    
    $results = array(); // create an empty array to store our results
    foreach ( $data as $item ): // loop the outer array
        foreach ( $item as $key => $value ): // loop the inner array
            if ( array_key_exists($value,$results) ){ // check if value is already in results, if not set to 1, otherwise increment
                $results[$value] = $results[$value] + 1;
            } else { 
                $results[$value] = 1;
            }
    
        endforeach;
    endforeach;
    
    // show our results array
    print "<pre>";
    print_r($results);
    

    【讨论】:

    • 谢谢 - 非常好!
    【解决方案2】:

    像这样遍历多维数组:

    <?php
    $data = array(
        'barack_obama' => array('19', '92', '27', '55', '57', '1409', '1384', '1362', '1345', '1280'),
        'united_states' => array('72', '81', '89', '90', '92', '21', '23', '27', '32', '47', '55'),
    );
    
    $aggregator = [];
    foreach (array_keys($data) as $i) {
        for ($j = 0, $entryCount = count($data[$i]); $j < $entryCount; $j++) {
            $index = $data[$i][$j];
            $aggregator[$index] = isset($aggregator[$index]) ? $aggregator[$index] + 1 : 1;
        }
    }
    var_export($aggregator);
    

    结果:

    array ( 19 => 1, 92 => 2, 27 => 2, 55 => 2, 57 => 1, 1409 => 1, 1384 => 1, 1362 => 1, 1345 => 1, 1280 => 1, 72 => 1, 81 => 1, 89 => 1, 90 => 1, 21 => 1, 23 => 1, 32 => 1, 47 => 1, )
    

    【讨论】:

      猜你喜欢
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      相关资源
      最近更新 更多