首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组与多维数组合并

数组与多维数组合并
EN

Stack Overflow用户
提问于 2017-10-25 10:07:05
回答 2查看 55关注 0票数 0

我有一个简单的设置:

代码语言:javascript
运行
复制
$array1 = array(0 => array(0 => array('amount' => '49')));
$array2 = array(0 => array(0 => array('amount' => '149')));

$mergetest = array_merge_recursive($array1, $array2);

这一产出如下:

代码语言:javascript
运行
复制
array(2) {
  [0]=>
  array(1) {
    [0]=>
    array(1) {
      ["amount"]=>
      string(2) "49"
    }
  }
  [1]=>
  array(1) {
    [0]=>
    array(1) {
      ["amount"]=>
      string(3) "149"
    }
  }
}

它应该以这样的方式合并,输出应该是这样的:

代码语言:javascript
运行
复制
    array(1) {
      [0]=>
      array(2) {
        [0]=>
        array(1) {
          ["amount"]=>
          string(2) "49"
        }
        [1]=>
        array(1) {
          ["amount"]=>
          string(3) "149"
        }
      }
    }

因为数组索引0已经存在,其中的数组也存在-因此它应该通过子数组而不是父数组进行匹配,并以这种方式向其中添加下一个子数组。

在不构建一个循环和检查的自定义函数的情况下,这能以一种干净的方式完成吗?

更新

一种解决方案,也适用于:

代码语言:javascript
运行
复制
$array1 = array(0 => array(0 => array('amount' => '49')));
$array2 = array(1243 => array(0 => array('amount' => '49'), 1 => array('amount' => '449')));

其中的输出应该位于单独的父数组(0和1243)中,就像上面的第一个输出一样。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-25 10:36:59

代码语言:javascript
运行
复制
<?php
     $array1 = array(0 => array(0 => array('amount' => '49')));
     $array2 = array(0 => array(0 => array('amount' => '149')));

     $result = array_map('array_merge', $array1, $array2);
     var_dump($result);    
?>

输出如下所示。

代码语言:javascript
运行
复制
array(1) {
  [0]=>
  array(2) {
    [0]=>
    array(1) {
      ["amount"]=>
      string(2) "49"
    }
    [1]=>
    array(1) {
      ["amount"]=>
      string(3) "149"
    }
  }
}

注意: array_merge_recursive()将失败,因为它会追加数字键,而不是合并它们:

不同索引的数组的更新答案

代码语言:javascript
运行
复制
    <?php
        $array1 = array(0 => array(0 => array('amount' => '49')));
        $array2 = array(1243 => array(0 => array('amount' => '49'), 1 => array('amount' => '449')));
        $keys = array_unique(array_merge(array_keys($array1), array_keys($array2)));

        foreach ($keys as $key) {
          if (array_key_exists($key, $array1) && array_key_exists($key, $array2)) {
            $array3[$key] = array_merge($array1[$key], $array2[$key]);
          } elseif (array_key_exists($key, $array1)) {
            $array3[$key] = $array1[$key];
          } else {
            $array3[$key] = $array2[$key];
          }
        }


        var_dump($array3);
?>

输出将是

代码语言:javascript
运行
复制
array(2) {
  [0]=>
  array(1) {
    [0]=>
    array(1) {
      ["amount"]=>
      string(2) "49"
    }
  }
  [1243]=>
  array(2) {
    [0]=>
    array(1) {
      ["amount"]=>
      string(2) "49"
    }
    [1]=>
    array(1) {
      ["amount"]=>
      string(3) "449"
    }
  }
}
票数 1
EN

Stack Overflow用户

发布于 2017-10-25 10:23:19

如果在顶层使用字符串键而不是整数,则可以得到所需的结果。

您有两个级别的整数索引数组,但在您看来,它们具有不同的性质,因为您需要以不同的方式合并它们。PHP无法知道这一点,因此在这种设置下,没有任何标准函数能够满足您的需要。您需要更改数据结构来标记这种差异(例如,在第一级使用字符串键,在第二级使用整数),或者在这里编写自定义的合并函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46929570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档