繁体   English   中英

将多维 PHP 数组与 in 合并

[英]Merge multi dimensional PHP array with in

我的问题与类似的帖子有点不同,从某种意义上说,我没有任何其他数组可以合并。

我想将数组与多维数组合并。

这样它就不再是多维的了。

这是我拥有的数组:

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
        )

)

我正在尝试将所有数组与 in 合并。但是索引 (TotalMonths) 很常见,因此它应该对(1+5+3) = 8之类的值求和,这将反映在新的合并数组中。

我也试过这个例子,但我不确定我是如何得到相同的值的。

这是我到目前为止所尝试的:

print_r($collidingMonths);
$outPutArray = array();
foreach($collidingMonths as $innerArray) {
    $outPutArray[key($innerArray)] = current($innerArray);
}

print_r($outPutArray);

但我得到了我不想要的结果:

Array
(
    [TotalMonths] => 3
)

最直接的方法是在合并之前从数组元素中取出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
)

我认为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);
        }
}

只需使用array_sumarray_column $collidingMonths作为主数组。

$arr2 = array_column($collidingMonths, 'TotalMonths');
echo array_sum($arr2);

结果

输出数组:

Array
(
    [0] => 1
    [1] => 5
    [2] => 3
)

和:

8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM