如何解决foreach循环和array_merge不正确匹配
我尝试将以下两个数组合并为一个找到通用order_id的数组:
$ orders数组:
[0] => Array (
[order_id] => 45145
[customers_email_address] => test@test.com
[customers_name] => test name
)
[1] => Array (
[order_id] => 45136
[customers_email_address] => test@yahoo.com
[customers_name] => test name
)
[2] => Array (
[order_id] => 45117
[customers_email_address] => test@yahoo.com
[customers_name] => test name
)
[3] => Array (
[order_id] => 44959
[customers_email_address] => test@gmail.com
[customers_name] => test name
)
[4] => Array (
[order_id] => 44938
[customers_email_address] => test@hotmail.com
[customers_name] => t
)
$ chitchattracking数组:
[1] => Array (
[order_id] => 44938
[carrier_tracking_code] => 9205590221582717655498
)
[2] => Array (
[order_id] => 44854
[carrier_tracking_code] => 92055902215827
)
在上面的数组样本中,有一个匹配的order_id:44938
这是我的代码,用于检查匹配情况,并将其放入$ tracked的新数组中:
foreach ($orders as $order) {
if (($key = array_search($order['order_id'],array_column($chitchattracking,'order_id'))) !== false) {
$tracked[] = array_merge( $order,$chitchattracking[$key]);
}
}
某种程度上,我真的搞砸了它,它匹配了错误的order_ids并发布了错误的跟踪号。此外,当我以有限的数量运行代码时,甚至找不到匹配项。
解决方法
您的问题几乎可以肯定是由array_column
返回一个从0开始的数字索引数组开始的事实引起的,而与输入数组的键无关。因此,如果输入数组也没有从0开始的数字索引,则array_search
返回的键不一定会与输入数组中的键匹配(这就是为什么您的代码根本不会与示例数据一起运行的原因。你的问题)。解决此问题的最简单方法是用$chitchattracking
重新索引order_id
,然后可以进行简单的isset
检查来控制对$tracking
的推送:
$tracking = array();
$chitchat = array_column($chitchattracking,null,'order_id');
foreach ($orders as $order) {
$order_id = $order['order_id'];
if (isset($chitchat[$order_id])) {
$tracking[] = array_merge($order,$chitchat[$order_id]);
}
}
print_r($tracking);
输出:
Array
(
[0] => Array
(
[order_id] => 44938
[customers_email_address] => test@hotmail.com
[customers_name] => t
[carrier_tracking_code] => 9.2055902215827E+21
)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。