如何添加值来自不同数组的多维数组值
how to add multidimensional array values whose values are from different arrays
我整天都在为此苦苦挣扎,希望有另一双眼睛能给我一些见识。我不确定我什至以正确的方式接近这个。我有两个数组,分别是一个多维数组和一个单数组,我试图将一个多维数组的内容相加,其值取自一个单数组,其中多维数组的内容与数组相同单个数组的键。我正在使用 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中取值的key将$multidimensionalArray中的值相加,然后除以$multidimensionalArray中key的个数,例如:multidimensionalArray中的key"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
)
谢谢:)
这应该适合你:
$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
我会使用 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);
我整天都在为此苦苦挣扎,希望有另一双眼睛能给我一些见识。我不确定我什至以正确的方式接近这个。我有两个数组,分别是一个多维数组和一个单数组,我试图将一个多维数组的内容相加,其值取自一个单数组,其中多维数组的内容与数组相同单个数组的键。我正在使用 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中取值的key将$multidimensionalArray中的值相加,然后除以$multidimensionalArray中key的个数,例如:multidimensionalArray中的key"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
)
谢谢:)
这应该适合你:
$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
我会使用 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);