【问题标题】:PHP merging arrays without overwriting dataPHP合并数组而不覆盖数据
【发布时间】:2013-07-11 11:24:06
【问题描述】:

我有许多数组,我希望在不覆盖或丢失任何数据的情况下合并它们。我相信它们被称为关联数组,但我不是 100% 确定术语。

数组包含如下信息:

$array1['title']
$array1['description']

$array2['title']
$array2['description']
$array2['random information']

我想合并 $array1 和 $array2 的公共键中包含的信息而不覆盖任何数据。

这可能吗?

我尝试过但没有成功的事情包括:

(array)$array3 = (array)$array1 + array($array2);

$array3 = array_push($array1,$array2);

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

基本上我想保留公共键,并将两个数组中的信息添加到新数组中。例如,我只想要一个 ['title'] ['description'] 等在新数组中,但我想要两个数组中的信息在新数组中。

所以 $array3 将包含 $array1 和 $array2 中的所有信息...来自['title'] ['description'] 的所有项目将保留在 $array3 中的 ['title'] ['description'] 下。

这可能吗?

谢谢各位。

【问题讨论】:

  • 你想用两个数组中的公共键做什么?
  • @Schleis 我想保留公用键,并将两个数组中的信息添加到新数组中。谢谢
  • @Schleis 我只想要新数组中的一个['title'] ['description'] 等,但我想要新数组中两个数组的信息
  • 我相信 OP 正在寻找 array( 'title' => array(), 'description' => array());

标签: php arrays merge


【解决方案1】:

我会合并所有键,然后合并数组,如下所示:

$merged = array();
foreach( array_merge( array_keys( $array1), array_keys( $array2)) as $key) {
    $values = array();
    if( array_key_exists( $key, $array1)) {
        $values[] = $array1[$key];
    }
    if( array_key_exists( $key, $array2)) {
        $values[] = $array2[$key];
    }
    $merged[$key] = $values;
}

您可以从this demo 看到,这会创建一个数组,如下所示:

Array
(
    [title] => Array
        (
            [0] => title1
            [1] => title2
        )

    [description] => Array
        (
            [0] => desc1
            [1] => desc2
        )

    [random information] => Array
        (
            [0] => random2
        )

)

【讨论】:

  • 我试过这个,它似乎不恰当地合并了它们。假设$array1['title']包含'document1', 'document2'$array2['title']包含'document3' and 'document4'....现在$array3['title']现在包含以下列表:'document1' 然后'document3' 然后'document2' 然后'document4'...我的数据比这复杂得多,但这是我尽我所能简化它.. 这是我的部分就寝时间世界,我明天再试一次!谢谢! :)
【解决方案2】:

我发现使用 array_replace_recursive 嵌套作品。第一次调用创建一个合并的数组,其中可能删除了一些值,第二次调用将重新合并回您的主数组,保留主数组中的所有数组键,但允许合并的数组覆盖主数组中的值。

 $mergedArray = array_replace_recursive($array2, array_replace_recursive($array1, $array2));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2018-01-18
    • 2022-11-02
    • 2013-04-09
    • 2012-11-03
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多