如何添加来自不同数组的多维数组值

问题描述 投票:0回答:3

我一整天都在与这个问题作斗争,希望另一双眼睛能给我一些见解。我什至不确定我是否以正确的方式处理这个问题。我有两个数组,即多维数组和单个数组,我试图将多维数组的内容相加,其值取自单个数组,其中多维数组的内容与数组相同单个数组的键。我正在使用 Laravel 构建一个应用程序。

$multidimensionArray = array:6 [▼
  "A2" => array:3 [▼
    0 => "A1"
    1 => "A2"
    2 => "A3"
  ]
  "A1" => array:4 [▼
    0 => "A1"
    1 => "A6"
    2 => "A5"
    3 => "A2"
  ]
  "A6" => array:1 [▼
    0 => "A3"
  ]
  "A3" => array:2 [▼
    0 => "A3"
    1 => "A2"
  ]
  "A5" => array:1 [▼
    0 => "A4"
  ]
  "A4" => array:2 [▼
    0 => "A4"
    1 => "A3"
  ]
]

$singeArray = array:6 [▼
  "A1" => 675.58333333333
  "A2" => 1786.75
  "A3" => 2897.9166666667
  "A4" => 4009.0833333333
  "A5" => 5120.25
  "A6" => 6231.4166666667
]

如何根据从$singleArray中取出值的键来添加$multiDimensionalArray中的值,然后除以$multiDimensionalArray中的键的数量,例如:在多维数组中的键“A2”中有值A1,A2, A3和singleArray中A1,A2,A3的值为675.58333333333,1786.75,2897.9166666667,如何将它们相加然后除以3(根据A2中值的个数)。

希望结果是这样的

$result = array(
"A2" => 1786.75
"A1" => 3453.5
...etc

)

谢谢你:)

arrays laravel multidimensional-array array-sum
3个回答
1
投票

我会使用

foreach
array_filter

由于您想要平均值,因此可以使用

array_sum
来完成。

这应该有效

$results = [];
foreach ($multidimensionArray as $key => $valueArr) {
    ## filter out all values of interest from $singleArray
    $filteredValues = array_filter($singeArray, function ($value, $identifier) use ($valueArr) {
        return in_array($identifier, $valueArr);
    }, ARRAY_FILTER_USE_BOTH);
    ## Here we get the average
    $results[$key] = array_sum($filteredValues) / count($filteredValues);
}
print_r($results);

工作沙盒链接


0
投票

这应该适合你:

$result = [];

array_walk($multidimensionArray, function($value, $key) use(&$result, $singeArray) {
   // get only those items from $singeArray which exist in $value
   // sum and divide by 3
   $result[ $key ]  = array_sum( array_intersect_key( $singeArray, array_flip($value) ) ) / 3;
});

var_dump( $result );

编辑: 更新了我的答案忘记使用

array_flip


0
投票

假设 2d 数组的行值是唯一的,过滤数据的最有效方法是通过目标行数据的翻转版本来过滤 1d 数组 - 这比进行迭代

in_array()
调用要便宜得多。

代码:(演示)

$result = [];
foreach ($multi as $key => $row) {
    $values = array_intersect_key($single, array_flip($row));
    $result[$key] = array_sum($values) / count($values);
}
var_export($result);
© www.soinside.com 2019 - 2024. All rights reserved.