Php 根据匹配的列名合并两个数组
我正在尝试根据匹配的顺序\u id合并两个数组: 阵列1: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
[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
)
)
)