【问题标题】:PHP: Merge 2 arraysPHP:合并 2 个数组
【发布时间】:2016-03-27 13:06:36
【问题描述】:

我已经尝试了一天的以下操作,但无法正常工作。

我从分页来源获取信息(在这个例子中说 3 页。所以我有 3 个数组要合并:

Array
(
    [status] => Active
    [nrEntries] => 6
    [entries] => Array
        (
            [0] => Array
                (
                    [sgname] => Merc
                    [timeentered] => 2016-02-08 04:30:00
                )

            [1] => Array
                (
                    [sgname] => bystander
                    [timeentered] => 2016-03-17 20:55:00
                )
        )
)

Array
(
    [status] => Active
    [nrEntries] => 6
    [entries] => Array
        (
            [0] => Array
                (
                    [sgname] => Elvis
                    [timeentered] => 2016-03-08 04:30:00
                )

            [1] => Array
                (
                    [sgname] => marcAR
                    [timeentered] => 2016-03-07 20:55:00
                )
        )
)

Array
(
    [status] => Active
    [nrEntries] => 6
    [entries] => Array
        (
            [0] => Array
                (
                    [sgname] => Killer
                    [timeentered] => 2016-03-09 05:30:00
                )

            [1] => Array
                (
                    [sgname] => MyName
                    [timeentered] => 2016-03-05 21:45:00
                )
        )
)

我正在寻找的结果是将它们合并到 1 个我可以作为结果返回的数组中。

Array
(
    [status] => Active
    [nrEntries] => 6
    [entries] => Array
        (
            [0] => Array
                (
                    [sgname] => Merc
                    [timeentered] => 2016-02-08 04:30:00
                )

            [1] => Array
                (
                    [sgname] => bystander
                    [timeentered] => 2016-03-17 20:55:00
                )

            [2] => Array
                (
                    [sgname] => Elvis
                    [timeentered] => 2016-03-08 04:30:00
                )

            [3] => Array
                (
                    [sgname] => marcAR
                    [timeentered] => 2016-03-07 20:55:00
                )

            [4] => Array
                (
                    [sgname] => Killer
                    [timeentered] => 2016-03-09 05:30:00
                )

            [5] => Array
                (
                    [sgname] => MyName
                    [timeentered] => 2016-03-05 21:45:00
                )
        )
)

我遇到的问题是,由于记录的索引号相同,因此使用 array_merge 它不起作用。

我尝试了以下方法,但这也不起作用。

<?PHP
            // add child array to the end of $result
            for ($i=0 ; $i<2; $i++) {
                $result['entries'][($page*2)+$i][] = $resultChild['entries'][$i];
            }
?>

【问题讨论】:

  • 我们也不知道代码中的任何变量是什么/做什么。
  • 我已经尝试并测试了十几种不同的东西,但都不起作用。你有什么可以帮助解决这个问题的吗?

标签: php arrays array-merge


【解决方案1】:
$a1['entries'] = array_merge_recursive($a1['entries'], $a2['entries'], $a3['entries']);

【讨论】:

  • 我选择这个答案是因为它是代码行中最简洁、最简洁的。下面的答案也有效。
【解决方案2】:

试试这个:

$array1 = array(
'status' => 'Active',
'nrEntries' => 6,
'entries' => array(
    array(
        'sgname' => 'Merc',
        'timeentered' => '2016-02-08 04:30:00'
    ),
    array(
        'sgname' => 'bystander',
        'timeentered' => '2016-03-17 20:55:00'
    )
  )
);

$array2 = array(
'status' => 'Active',
'nrEntries' => 6,
'entries' => array(
    array(
        'sgname' => 'Elvis',
        'timeentered' => '2016-03-08 04:30:00'
    ),
    array(
        'sgname' => 'marcAR',
        'timeentered' => '2016-03-07 20:55:00'
    )
   )
 );

$result = array_merge_recursive($array1, $array2);
$result['status']    = array_unique($result['status'])[0];
$result['nrEntries'] = array_unique($result['nrEntries'])[0];
echo "<pre>";
print_r($result);
echo "</pre>";

这给出了以下内容:

  Array
 (
  [status] => Active
  [nrEntries] => 6
   [entries] => Array
    (
        [0] => Array
            (
                [sgname] => Merc
                [timeentered] => 2016-02-08 04:30:00
            )

        [1] => Array
            (
                [sgname] => bystander
                [timeentered] => 2016-03-17 20:55:00
            )

        [2] => Array
            (
                [sgname] => Elvis
                [timeentered] => 2016-03-08 04:30:00
            )

        [3] => Array
            (
                [sgname] => marcAR
                [timeentered] => 2016-03-07 20:55:00
            )

      )

   )

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    array_merge() 不是递归的,因此它将替换整个条目数组。有一个名为 array_merge_recursive() 的函数,但在您的情况下也不起作用,因为它会在 statusnrEntries 下创建包含所有数组值的数组。

    您需要做的是合并“大”页面数组,然后分别合并条目。这可能如下所示:

    // Keep all pages in an array
    $pages = [$pageOne, $pageTwo, $pageThree];
    
    // Merge the page arrays
    $result = array_merge(...$pages);
    
    // Clear entries as they only contain the data from the last page
    $result['entries'] = [];
    
    // Merge entries with the entries of each page separately
    foreach ($pages as $page) {
        $result['entries'] = array_merge($result['entries'], $page['entries']);
    }
    

    这是我能想到的最简单的例子。我希望它可以帮助您了解正在发生的事情,以便您可以重构它以满足您的需求。

    只要您的条目数组具有从 0 开始的数字键,array_merge 就会附加值而不是替换它们。

    【讨论】:

      猜你喜欢
      • 2013-03-08
      • 1970-01-01
      • 2019-06-05
      • 2022-08-07
      • 1970-01-01
      • 2016-03-08
      • 2013-06-19
      • 1970-01-01
      相关资源
      最近更新 更多