Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
迭代多维PHP数组,平均键相同的值_Php_Arrays_Multidimensional Array - Fatal编程技术网

迭代多维PHP数组,平均键相同的值

迭代多维PHP数组,平均键相同的值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个类似于下面的数组,但要大得多: Array( [0] => Array( [carrier] => Test Carrier [value] => 5 ), [1] => Array( [carrier] => New Carrier [value] => 18 ), [2] => Array( [carrier] = Test

我有一个类似于下面的数组,但要大得多:

Array(
    [0] => Array(
        [carrier] => Test Carrier
        [value] => 5
    ),
    [1] => Array(
        [carrier] => New Carrier
        [value] => 18
    ),
    [2] => Array(
        [carrier] = Test Carrier
        [value] => 8
    )
)
实际上,大约有306个数组具有载波和值的键值对。我想做的是迭代上面的这个数组(它有多个带有carrier=>testcarrier的数组),在载波名称相同的地方添加相应的值,然后除以2得到平均值

因此,对于上面的示例,伪代码的结果将是:

  • 代码注意到承运人与另一承运人相同(即测试承运人)

  • 为13添加8+5,但记住它有两个数组,其中
    carrier=Test carrier
    ,因此它除以2并将值设置为该值。如果第三次发生,它将被2加除。目标是如果有15条记录具有相同的运营商名称,则将所有值相加并除以15,得到平均值

  • 返回一个数组,该数组具有与上面相同的数据,但没有重复的载波名称,其值等于具有相同名称的所有数组的组合平均值

  • 这是我到目前为止所拥有的,但它是不完整的:

        $cars = array(
            'carriers' => array(
            )
        );
    
        $avgs = array();
    
        foreach($arr as $new) {
    
            if(in_array($new['carrier'], $cars['carriers'])) {
    
                $avgs['value'] = $avgs['value'] + $new['value'] / $cars['count'];
    
            } else {
    
                $avgs[] = $new;
    
                $cars['carriers'] = array(
                    'carrier' => $new['carrier'],
                    'count'   => 0
                );
    
            }
    
        }
    
    如何做到这一点?

    
    
    <?php 
    $data = array(
        array(
            "carrier" => "Test Carrier",
            "value" => 5
        ),
        array(
            "carrier" => "New Carrier",
            "value" => 18
        ),
        array(
            "carrier" => "Test Carrier",
            "value" => 8
        )
    );
    
    $results = array();
    
    foreach($data as $row){
        //print_r($row);
        $carrier = $row['carrier'];
        $value = $row['value'];
        if( array_key_exists ( $carrier , $results ) ){
            $results["$carrier"]["value"] =  ( ( $results["$carrier"]["count"] * $results["$carrier"]["value"] ) + $value ) / ( $results["$carrier"]["count"] + 1 );
            $results["$carrier"]["count"] = $results["$carrier"]["count"] + 1;
        }else{
            $results["$carrier"] = array("value"=>$value, "count" => 1);
        }
    
        //echo "Processing carrier: $carrier value: $value </br>";
    }
    
    print_r($results);