这个问题可能已被多次提出过,但我的意义不大,因为我没有任何其他数组可以合并。
我想在多维数组中合并数组。
因此它不再是多维的。
这是我得到的数组。
Array
(
[2013-12-01::2015-07-29] => Array
(
[TotalMonths] => 1
[0] => 2015-07-01
)
[2015-11-01::2016-03-30] => Array
(
[TotalMonths] => 5
[0] => 2015-11-01
[1] => 2015-12-01
[2] => 2016-01-01
[3] => 2016-02-01
[4] => 2016-03-01
)
[2016-04-01::2017-11-30] => Array
(
[TotalMonths] => 3
[0] => 2016-04-01
[1] => 2016-05-01
[2] => 2016-06-01
)
)
我正在尝试将所有数组合并到。但是索引(TotalMonths)很常见,所以只有这样它才能求和(1+5+3) = 8
这样的值
这将反映在新的合并数组中。
我也试过这个例子.. PHP: Turning multidimensional arrays to single dimension arrays
但不确定我是如何得到相同的值..
这是我到目前为止所尝试过的......
print_r($collidingMonths);
$outPutArray = array();
foreach($collidingMonths as $innerArray) {
$outPutArray[key($innerArray)] = current($innerArray);
}
print_r($outPutArray);
但遗憾的是我得到了我不想要的结果:(
Array
(
[TotalMonths] => 3
)
答案 0 :(得分:1)
最直接的方法是在合并之前从数组元素中取出TotalMonths
值:
$result = [];
$totalMonths = 0;
foreach($collidingMonths as $innerArray) {
$TotalMonths += $innerArray['TotalMonths'];
unset($innerArray['TotalMonths']);
$result = array_merge($result, $innerArray);
}
== - == - == - = -
<强>更新强>
谢谢,非常好的工作。我不得不做一些改变。但一切都是你的代码。 提供我的更新代码可能对某些人有所帮助。
更新代码
$outPutMonths = [];
$TotalMonths = 0;
foreach($collidingMonths as $innerArray) {
$TotalMonths += $innerArray['TotalMonths'];
unset($innerArray['TotalMonths']);
$outPutMonths = array_merge($outPutMonths, $innerArray);
}
$outPutMonths['TotalMonths'] = $TotalMonths;
更新结果(所需结果):
Array
(
[TotalMonths] => 9
[0] => 2015-07-01
[1] => 2015-11-01
[2] => 2015-12-01
[3] => 2016-01-01
[4] => 2016-02-01
[5] => 2016-03-01
[6] => 2016-04-01
[7] => 2016-05-01
[8] => 2016-06-01
)
答案 1 :(得分:1)
我认为OP想要的预期输出是:
array
(
[TotalMonths] => 9,
[0] => 2015-07-01,
[1] => 2015-11-01,
[2] => 2015-12-01,
[3] => 2016-01-01,
[4] => 2016-02-01,
[5] => 2016-03-01,
[6] => 2016-04-01,
[7] => 2016-05-01,
[8] => 2016-06-01,
)
为此,我们可以这样做:
$outPutArray = array();
foreach($collidingMonths as $timestamp => $monthsArray)
{
foreach($monthsArray as $key => $value)
{
if(is_numeric($value))
{
if(isset($outPutArray[$key]))
$outPutArray[$key] += $value;
else
$outPutArray[$key] = $value;
}
else
{
array_push($outPutArray, $value);
}
}
答案 2 :(得分:0)
只需使用array_sum
和array_column
即可。将$collidingMonths
作为主数组。
$arr2 = array_column($collidingMonths, 'TotalMonths');
echo array_sum($arr2);
<强>结果强>
输出数组:
Array
(
[0] => 1
[1] => 5
[2] => 3
)
<强>总:强>
8