【问题标题】:Merge and sum multiple multidimensional arrays in PHP在 PHP 中合并和求和多个多维数组
【发布时间】:2014-12-25 19:56:43
【问题描述】:

几天前我问了一个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
                )

        )

)

此合并/求和数组中缺少信息。请注意,根本没有“保证”。好像arr1的优先级比arr3高?

【问题讨论】:

  • 为什么不使用对象数组呢?我的意思是为每一天定义一个对象。我认为拥有不同结构的数组元素不是一个好主意。合并这些数组有什么意义?
  • 也许,我不太了解这样做的好处。这是两个单独的查询,它们已被重组以在 TWIG 模板中使用。用 MySQL 合并这两个查询是不切实际的,所以我用 PHP 来做。
  • 也许它很实用 :)。你能给出你正在从中查询的表格吗?
  • 该查询是一个非常高级的 Propel 查询,我认为完全超出了这个问题的范围!如果这个问题没有切实可行的解决方案,我会从那个方向解决它......
  • 我认为一种方法是为您的数组定义一种格式,然后更轻松地合并它们。我的意思是这样的: array('day_of_week'=>"" , 'date'=> "" , 'breakfast'=> "" , 'lunch' =>"" , 'dinner' => "") 这可能吗在你的软件逻辑中??

标签: php arrays multidimensional-array


【解决方案1】:

问题其实很简单,需要把for改成:

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

只需添加

这将使 for 循环遍历作为参数传入的 1 到 3 个数组,如果您这样做

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    相关资源
    最近更新 更多