【问题标题】:How to merge multidimensional arrays in PHP to be able to output them together如何在 PHP 中合并多维数组以便能够将它们一起输出
【发布时间】:2015-10-16 18:41:51
【问题描述】:

我做了一个例子。我们有两个数组:$users$items。 我们需要将它们合并在一起,以便我们可以一起显示它们。我的问题是如何做到这一点?我已经举了一个例子来说明结果应该是什么样子。在下面的代码中,您将看到 $merged1$merged2 数组,它们应该代表最终目标。但是如何实现呢?

你可以在你的服务器上运行这个文件,我们称之为index.php

<!DOCTYPE html>
<html>
<head>
    <title>PHP arrays merge</title>

    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">

</head>
<body>

    <div class="container"> <br>

        <?php 

            $users = [

                145 => ['first_name' => 'John', 'last_name' => 'Doe'],
                237 => ['first_name' => 'Erick', 'last_name' => 'Smith']

            ];

            $items = [

                145 => ['name' => 'Epic Sword', 'price' => 7000],
                237 => ['name' => 'Lame Sword', 'price' => 15]

            ];

            // how to merge $users and $items to get this array ?
            $merged1 = [
                145 => ['first_name' => 'John', 'last_name' => 'Doe', 'name' => 'Epic Sword', 'price' => 7000],
                237 => ['first_name' => 'Erick', 'last_name' => 'Smith', 'name' => 'Lame Sword', 'price' => 15]
            ];

            var_dump($merged1);

            echo "<br>";

            // how to merge $users and $items to get this array ?
            $merged2 = [

                145 => ['first_name' => 'John', 'last_name' => 'Doe', 
                        'items' => ['name' => 'Epic Sword', 'price' => 7000] // inner array
                ],

                237 => ['first_name' => 'Erick', 'last_name' => 'Smith',
                        'items' => ['name' => 'Lame Sword', 'price' => 15]

                ]

            ];

            var_dump($merged2);
        ?>

    </div>

<!-- jQuery library -->
<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
</html>

【问题讨论】:

    标签: php arrays multidimensional-array merge


    【解决方案1】:

    你应该使用函数array_merge_recursive。试试这个代码:

    $result = array_merge_recursive($users, $items);
    print_r($result);
    

    对于第二个结果:

    $result2 = array();
    foreach ($users as $key => $val) {
         $result2[$key] = array_merge((array)$val, array('items' => $items[$key]));
    }
    

    编辑:

    对于第一次合并,根据解决方案phil dot kemmeter可以使用以下函数:

    function my_array_merge ($arr,$ins) {
        if(is_array($arr))
        {
            if(is_array($ins)) foreach($ins as $k=>$v)
            {
                if(isset($arr[$k])&&is_array($v)&&is_array($arr[$k]))
                {
                    $arr[$k] = my_array_merge($arr[$k],$v);
                }
                else {
                    // This is the new loop :)
                    while (isset($arr[$k]))
                        $k++;
                    $arr[$k] = $v;
                }
            }
        }
        elseif(!is_array($arr)&&(strlen($arr)==0||$arr==0))
        {
            $arr=$ins;
        }
        return($arr);
    }
    $result = my_array_merge($users, $items);
    print_r($result);
    

    【讨论】:

    • 您的第二个答案有效,但第一个答案没有按照我的要求进行。谢谢你。如果您先提供解决方案,我会接受您的回答。
    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    相关资源
    最近更新 更多