我正在尝试根据匹配的order_id合并两个数组:
Array1:
[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
)
array2:
[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列匹配的数组,并基于该数组进行合并。
我尝试了array_merge和array_merge_recursive等,但是那些只是将值添加到数组的末尾,我试图将它们合并到同一数组键中。
我认为我需要一个foreach循环,该循环检查是否第二个命令是否order_id = order_id,以及是否确实将项目推送到第三个数组。但是我的问题是数组不是按order_id排序的,因此它们可能永远不会相同,因为如果可行,foreach循环将按照数组的顺序遍历数组。
答案 0 :(得分:-1)
获取用于维护该索引的order_id的客户索引,即:
Array
(
[79] => 44925
[80] => 44923
[81] => 44917
[82] => 44915
)
然后简单地循环,并使用order_id进行数组搜索以返回客户商品,然后添加到数组中。
例如:(请注意,order_ids中没有一个与您的示例中的客户匹配,因此已更改)
<?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
(
[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
)
)
)
理想情况下,由于内存问题,您不会在运行时将所有客户选择到一个阵列中,而是通过数据库查询来完成。