在PHP中合并和求和多个多维数组

时间:2014-12-25 19:56:43

标签: php arrays multidimensional-array

几天前我问question这个问题得到了很好的回答,但现在我已经实施了解决方案并遇到了一些问题。 (感谢Oleg获得这个目标)

我试图合并并总结以下数组:

Array
(
    [Thursday] => Array
        (
            [Lunch] => Array
                (
                    [Total] => 10
                )

            [Date] => 2015-12-31
        )

)


Array
(
    [Thursday] => Array
        (
            [Lunch] => Array
                (
                    [Guarantees] => 231
                )

            [Date] => 2015-12-31
        )

)


Array
(
    [Friday] => Array
        (
            [Breakfast] => Array
                (
                    [Total] => 1
                )

            [Date] => 2016-01-01
            [Lunch] => Array
                (
                    [Total] => 1
                )

        )

    [Thursday] => Array
        (
            [Lunch] => Array
                (
                    [Total] => 1
                )

            [Date] => 2015-12-31
        )

)

我正在使用以下代码:

private function _merge( $arr1, $arr2, $arr3 )
    {

        $maxArraysCount = func_num_args();
        $return = array();
        for( $i = 1; $i < $maxArraysCount; $i++ ){
            $arr = 'arr' . $i;
            if( isset( $$arr ) && is_array( $$arr )){
                foreach ( $$arr as $day => $value ) {
                    foreach ( $value as $meal => $time ) {
                        if( $meal == "Date"){
                            $return[$day][$meal] = $time;
                        } else {
                            foreach ( $time as $type => $count ) {
                                if( !isset( $return[$day][$meal][$type] ) )
                                    $return[$day][$meal][$type] = 0;
                                $return[$day][$meal][$type] = $count + $return[$day][$meal][$type];
                            }
                        }
                    }
                }
            }
        }
        return $return;
    }

它正在输出:

Array
(
    [Thursday] => Array
        (
            [Lunch] => Array
                (
                    [Total] => 11
                )

            [Date] => 2015-12-31
        )

    [Friday] => Array
        (
            [Breakfast] => Array
                (
                    [Total] => 1
                )

            [Date] => 2016-01-01
            [Lunch] => Array
                (
                    [Total] => 1
                )

        )

)

此合并/求和数组中缺少信息。请注意,没有&#34;担保&#34;一点都不似乎arr1的优先级高于arr3?

1 个答案:

答案 0 :(得分:0)

实际上问题非常简单,您需要将for更改为:

for( $i = 1; $i <= $maxArraysCount; $i++ ){

只需添加&lt; =而不是&lt;

这将使for循环通过1到3个数组作为参数传入,如果你只是做&lt;它会一直运行,直到$ i小于3,不等于3。