【问题标题】:PHP array_merge_recursive using foreach loopPHP array_merge_recursive 使用 foreach 循环
【发布时间】:2019-07-09 13:26:31
【问题描述】:

我想将几个数组合并成一个新数组,但按相同的键值分组

当我使用这个循环时

foreach($mrh as $group){
    print_r($group);
};

输出是

Array (
    [2] => 4
)
Array (
    [2] => 5
)
Array (
    [3] => 7
)
Array (
    [3] => 8
)
Array (
    [3] => 10
)

我想要的输出是

array (
    [2] => array(
        [0] => 4,
        [1] => 5
    ),
    [3] => array(
        [0] => 7,
        [1] => 8,
        [2] => 10,
    )
)

array_merge_recursive() 可能有用,但我无法用foreach 循环解决它

【问题讨论】:

    标签: php arrays loops foreach array-merge


    【解决方案1】:

    只需循环数组,并使用内部循环处理内部元素。然后根据它们的键将它们分配到结果数组中。

    $result = [];
    foreach ($mrh as $group) {
        foreach ($group as $key=>$value) {
            // Declare the array if it does not exist, to avoid notices
            if (!isset($result[$key]))
                $result[$key] = [];
    
            // Append the value
            $result[$key][] = $value;
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果您的内部数组 always 大小为 1,您可以使用 array-key-first 作为:

      foreach($mrh as $e) {
          $k = array_key_first($e);
          $res[$k][] = $e[$k];
      }
      

      现场示例:3v4l

      【讨论】:

      • 简洁的方式,我喜欢它!
      【解决方案3】:
      $mrh = [ [2=>4], [2=>5], [3=>7], [3=>8], [3=>10] ];
      $newArray = [];
      
      foreach($mrh as $group){ // loop over groups
        foreach($group as $key => $value) { // “loop over” group, to get access to key and value
          $newArray[$key][] = $value; // add value as a new element in the sub-array accessed by $key
        }
      }
      

      【讨论】:

        【解决方案4】:

        使用foreach

         $a = [
        [2 => 4],
        [2 => 5],
        [3 => 7],
        [3 => 8],
        [3 => 10]
        ];
        $r = [];
        foreach($a as $k => $v){
          $_value = end($v);
          $r[key($v)][] = $_value;
        }
        echo '<pre>';
        print_r($r);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-26
          • 1970-01-01
          • 2016-09-26
          • 2012-07-19
          • 2015-12-10
          • 1970-01-01
          • 2014-03-15
          • 1970-01-01
          相关资源
          最近更新 更多