Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据匹配的列名合并两个数组_Php_Arrays - Fatal编程技术网

Php 根据匹配的列名合并两个数组

Php 根据匹配的列名合并两个数组,php,arrays,Php,Arrays,我正在尝试根据匹配的顺序\u id合并两个数组: 阵列1: [0] => Array ( [order_id] => 44446 [carrier_tracking_code] => LB399189926US ) [1] => Array ( [order_id] => 42816 [carrier_tracking_code] => 9205590221582717353066 ) [2] => Arr

我正在尝试根据匹配的顺序\u id合并两个数组:

阵列1:

[0] => Array (
    [order_id] => 44446
    [carrier_tracking_code] => LB399189926US
    )
[1] => Array (
    [order_id] => 42816
    [carrier_tracking_code] => 9205590221582717353066
    )
[2] => Array (
    [order_id] => 44490
    [carrier_tracking_code] => 9205590221582717353080
    )
[3] => Array (
    [order_id] => 44507
    [carrier_tracking_code] => 9205590221582717353073
    )
[4] => Array (
    [order_id] => 44437
    [carrier_tracking_code] => 9205590221582717353042
    )
[5] => Array (
    [order_id] => 44519
    [carrier_tracking_code] => 9205590221582717352939
    )
[6] => Array (
    [order_id] => 44561
    [carrier_tracking_code] => 9205590221582717353028
    )
[7] => Array (
    [order_id] => 42985
    [carrier_tracking_code] => 9205590221582717353035
    )
[8] => Array (
    [order_id] => 42673
    [carrier_tracking_code] => 9205590221582717353097
    )
[9] => Array (
    [order_id] => 40197
    [carrier_tracking_code] => 9205590221582717353059
    )
[10] => Array (
    [order_id] => 44733
    [carrier_tracking_code] => 92055902215827
    )
阵列2:

[79] => Array (
    [order_id] => 44925
    [customers_email_address] => test@test.com
    [customers_name] => JTest name
    )
[80] => Array (
    [order_id] => 44923
    [customers_email_address] =>  test@test.com
    [customers_name] => Test name
    )
[81] => Array (
    [order_id] => 44917
    [customers_email_address] =>  test@test.com
    [customers_name] => Test name
    )
[82] => Array (
    [order_id] => 44915
    [customers_email_address] => a test@test.com
    [customers_name] => Test name
    )
我的目标是创建第三个数组,该数组与来自这两个数组的order_id列相匹配,并基于该数组进行合并

我尝试过数组合并和数组合并递归等,但这些只是将值添加到数组的末尾,我尝试将它们合并到同一个数组键中


我想我需要一个foreach循环来检查第二个数组的order\u id=order\u id,以及它是否将项目推送到第三个数组。但是,我的问题是数组不是按order\u id排序的,因此它们可能永远不会相同,因为foreach循环将按数组的顺序查看数组(如果有意义)。

获取维护索引的order\u id的客户索引,即:

Array
(
    [79] => 44925
    [80] => 44923
    [81] => 44917
    [82] => 44915
)
然后简单地循环,并使用order_id进行数组搜索,返回客户项目,添加到数组中

如下所示:请注意,在您的示例中,没有一个订单ID与客户匹配,因此发生了更改

<?php
$orders = [
    ['order_id' => 44925, 'carrier_tracking_code' => 'LB399189926US'],
    ['order_id' => 44923, 'carrier_tracking_code' => '9205590221582717353066'],
    ['order_id' => 44490, 'carrier_tracking_code' => '9205590221582717353080'],
];

$customers = [
    79 => ['order_id' => 44490, 'customers_email_address' => 'test@test.com', 'customers_name' => 'JTest name'],
    80 => ['order_id' => 44923, 'customers_email_address' => ' test@test.com', 'customers_name' => 'Test name'],
    81 => ['order_id' => 44925, 'customers_email_address' => ' test@test.com', 'customers_name' => 'Test name']
];

$customer_index = array_combine(array_keys($customers), array_column($customers, 'order_id'));

$result = [];

foreach ($orders as $key => $order) {
    $result[$key] = $order;
    
    $customer = array_search($order['order_id'], $customer_index);
    $result[$key]['customer'] = $customer ? $customers[$customer] : [];
}

print_r($result);

理想情况下,由于内存问题,您不会在运行时将所有客户选择到一个数组中,而是通过数据库查询来执行此操作。

研究使用类似于array\u column$array2,null、“order\u id”的方法,根据订单id对第二个数组进行索引,然后使用foreach。它可能会更好地与其他数组索引,但有一个GO。请考虑将您的答案转移到DUPE页面。Nick已转移他的答案副本。
Array
(
    [0] => Array
        (
            [order_id] => 44925
            [carrier_tracking_code] => LB399189926US
            [customer] => Array
                (
                    [order_id] => 44925
                    [customers_email_address] =>  test@test.com
                    [customers_name] => Test name
                )

        )

    [1] => Array
        (
            [order_id] => 44923
            [carrier_tracking_code] => 9205590221582717353066
            [customer] => Array
                (
                    [order_id] => 44923
                    [customers_email_address] =>  test@test.com
                    [customers_name] => Test name
                )

        )

    [2] => Array
        (
            [order_id] => 44490
            [carrier_tracking_code] => 9205590221582717353080
            [customer] => Array
                (
                    [order_id] => 44490
                    [customers_email_address] => test@test.com
                    [customers_name] => JTest name
                )

        )

)