【问题标题】:Merge arrays made in a loop PHP合并循环PHP中的数组
【发布时间】:2015-07-30 23:28:28
【问题描述】:

我有一个数组,在同一周重复 3 次,但 3 个不同的用户分别拥有你的总数:

array
  0 => 
    array
      'week' => '1'
      'user' => 'Oswaldo Aranha'
      'totals' => 'value'
  1 => 
    array
      'week' => '1'
      'user' => 'Protogenes'
      'totals' => 'value'
  2 => 
    array
      'week' => '1'
      'user' => 'Rego Barros'
      'totals' => 'value'
  3 => 
    array
      'week' => '2'
      'user' => 'Oswaldo Aranha'
      'totals' => 'value'
  4 => 
    array
      'week' => '2'
      'user' => 'Protogenes'
      'totals' => 'value'
  5 => 
    array
      'week' => '2'
      'user' => 'Rego Barros'
      'totals' => 'value'
  ...    

我想将 3 个用户和您的总数统一到一个数组中。像这样:

array 
  0 => 
  array 
    'week' => '1'
    'Oswaldo Aranha' => 'value'
    'Protogenes' => 'value'
    'Rego Barros' => 'value'
  1 => 
  array 
    'week' => '2'
    'Oswaldo Aranha' => 'value'
    'Protogenes' => 'value'
    'Rego Barros' => 'value'

  2 => 
  array 
    'week' => '3'
    'Oswaldo Aranha' => 'value'
    'Protogenes' => 'value'
    'Rego Barros' => 'value'
  ...

我正在尝试使用array_merge()array_combine()array_whatever(),但不起作用。我是怎么做到的?

【问题讨论】:

    标签: php arrays associative-array array-merge


    【解决方案1】:

    你可以使用array_merge();

    $arr=array_merge ( $array[0],$array[1] ,$array[3]);
    

    希望对你有帮助:)

    有关更多信息,此链接将为您提供帮助:

    http://php.net/manual/en/function.array-merge.php

    【讨论】:

    • 感谢回复,但第一个数组示例有很多子数组,不具体。每个月,都有你的几周......使用你的例子,我不知道我必须放入多少个数组array_merge()
    • 您可以遍历主数组并检查每个子数组中的星期值,然后将以前的结果与新结果合并,如串联原则:)
    【解决方案2】:
    $array = [
        [
            'week' => '1',
            'user' => 'Oswaldo Aranha',
            'totals' => 'value'
        ],
        [
            'week' => '1',
            'user' => 'Protogenes',
            'totals' => 'value'
        ],
        [
            'week' => '1',
            'user' => 'Rego Barros',
            'totals' => 'value'
        ],
        [
            'week' => '2',
            'user' => 'Oswaldo Aranha',
            'totals' => 'value',
        ],
        [
            'week' => '2',
            'user' => 'Protogenes',
            'totals' => 'value'
        ]
    ];
    function combineWeeks($array) {
        $results = [];
        for($i = 0;$i < count($array);$i++) {
            $results[$array[$i]['week']][$array[$i]['user']] = $array[$i]['totals'];
            $results[$array[$i]['week']]['week'] = $array[$i]['week'];
        }
        $combined = [];
        foreach($results as $key => $value) {
            $combined[] = $results[$key];
        }
        return $combined;
    }
    

    用法:

    $combinedArray = combineWeeks($array);
    print_r($combinedArray);
    

    输出:

    Array
    (
        [0] => Array
            (
                [Oswaldo Aranha] => value
                [week] => 1
                [Protogenes] => value
                [Rego Barros] => value
            )
    
        [1] => Array
            (
                [Oswaldo Aranha] => value
                [week] => 2
                [Protogenes] => value
            )
    
    )
    

    【讨论】:

    • 还有一个问题。有了这个新数组,我如何显示 Protogenes 的值?
    • 用 foreach 循环它。取决于你想如何访问它:$array[0]['Protogenes'];
    【解决方案3】:

    我认为没有 php 函数可以为你做这件事。自己动手吧:

    $in = $array;
    $out = [];
    foreach ($in as $curIn) {
        if ( ! isset ($out[$curIn["week"]])) {
            $out[$curIn["week"]] = [];
        }
        $out[$curIn["week"]][$curIn["user"]] = $curIn["totals"];
    }
    

    就是这样。

    【讨论】:

      猜你喜欢
      • 2011-05-18
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      相关资源
      最近更新 更多