php - 通过多个键值对合并两个数组
问题描述
我有两个数组,其中包含主城市和子城市的用户不同统计信息。
两个数组之间的区别在于其中一个具有 ofd 属性而另一个没有 ofd。另一个数组具有相同用户的其他一些统计信息,例如已交付。
所以我想在这里实现的是根据不同的主城市和子城市将用户统计数据组合到一个数组中......
阵列 1:
[310] => Array
(
[walker_id] => 158
[walker] => سلطان 158
[districts] => Al Muhammadiyah, Al Hamadaniyah, Abhur Aljanubiah, Al Basatin, Al Asalah, Ar Rayyan, Abur Ash Shamaliyah,
Al Murjan, As Salhiyah, Al Khalidiyah, Ar Rawadah, Az Zahra, Al Faisaliyah, An Nahdah, Ash Shati, Al Wahah, Al
Khaldiyah, Al Loaloa, Ar Rabwah, An Nuzhah, An Naim, King Abdul Aziz International Airport, Ash Sheraa, Az Zomorod, Al
Yaqoot, Al Amwaj, Al Hamra, Al Andalus, Al Aziziyah, As Samir, Al Fadeylah, Al Waha, An Nakhil, Mraykh, Ash Sharafiyah,
Al Marwah, Abhur Al Junoobiyah, Petoromin, An Nasim, Abrug Ar Rughamah, Al Amir Abdulmajed, Jeddah Islamic Seaport, Al
Frosya, Taibah, As Salamah, As Sarawat, Al Farouk, Ar Rewis, As Safa, Ar Rawabi, Al Baghdadiyah Al Gharbiyah, Faysalia,
Al Salamah, Mishrifah, Thuwal, Al Masarah
[main_city] => Jeddah
[sub_city] => Jeddah
[ofd] => 25
)
[311] => Array
(
[walker_id] => 158
[walker] => سلطان 158
[districts] => Al Muhammadiyah, Al Hamadaniyah, Abhur Aljanubiah, Al Basatin, Al Asalah, Ar Rayyan, Abur Ash Shamaliyah,
Al Murjan, As Salhiyah, Al Khalidiyah, Ar Rawadah, Az Zahra, Al Faisaliyah, An Nahdah, Ash Shati, Al Wahah, Al
Khaldiyah, Al Loaloa, Ar Rabwah, An Nuzhah, An Naim, King Abdul Aziz International Airport, Ash Sheraa, Az Zomorod, Al
Yaqoot, Al Amwaj, Al Hamra, Al Andalus, Al Aziziyah, As Samir, Al Fadeylah, Al Waha, An Nakhil, Mraykh, Ash Sharafiyah,
Al Marwah, Abhur Al Junoobiyah, Petoromin, An Nasim, Abrug Ar Rughamah, Al Amir Abdulmajed, Jeddah Islamic Seaport, Al
Frosya, Taibah, As Salamah, As Sarawat, Al Farouk, Ar Rewis, As Safa, Ar Rawabi, Al Baghdadiyah Al Gharbiyah, Faysalia,
Al Salamah, Mishrifah, Thuwal, Al Masarah
[main_city] => Jeddah
[sub_city] => Khulais
[ofd] => 1
)
阵列 2:
[260] => Array
(
[walker_id] => 158
[walker] => سلطان 158
[main_city] => Jeddah
[sub_city] => Jeddah
[districts] => Al Muhammadiyah, Al Hamadaniyah, Abhur Aljanubiah, Al Basatin, Al Asalah, Ar Rayyan, Abur Ash Shamaliyah,
Al Murjan, As Salhiyah, Al Khalidiyah, Ar Rawadah, Az Zahra, Al Faisaliyah, An Nahdah, Ash Shati, Al Wahah, Al
Khaldiyah, Al Loaloa, Ar Rabwah, An Nuzhah, An Naim, King Abdul Aziz International Airport, Ash Sheraa, Az Zomorod, Al
Yaqoot, Al Amwaj, Al Hamra, Al Andalus, Al Aziziyah, As Samir, Al Fadeylah, Al Waha, An Nakhil, Mraykh, Ash Sharafiyah,
Al Marwah, Abhur Al Junoobiyah, Petoromin, An Nasim, Abrug Ar Rughamah, Al Amir Abdulmajed, Jeddah Islamic Seaport, Al
Frosya, Taibah, As Salamah, As Sarawat, Al Farouk, Ar Rewis, As Safa, Ar Rawabi, Al Baghdadiyah Al Gharbiyah, Faysalia,
Al Salamah, Mishrifah, Thuwal, Al Masarah
[delivered] => 16
[undelivered] => 3
[returnedToowner] => 0
)
[261] => Array
(
[walker_id] => 158
[walker] => سلطان 158
[main_city] => Jeddah
[sub_city] => Khulais
[districts] => Al Muhammadiyah, Al Hamadaniyah, Abhur Aljanubiah, Al Basatin, Al Asalah, Ar Rayyan, Abur Ash Shamaliyah,
Al Murjan, As Salhiyah, Al Khalidiyah, Ar Rawadah, Az Zahra, Al Faisaliyah, An Nahdah, Ash Shati, Al Wahah, Al
Khaldiyah, Al Loaloa, Ar Rabwah, An Nuzhah, An Naim, King Abdul Aziz International Airport, Ash Sheraa, Az Zomorod, Al
Yaqoot, Al Amwaj, Al Hamra, Al Andalus, Al Aziziyah, As Samir, Al Fadeylah, Al Waha, An Nakhil, Mraykh, Ash Sharafiyah,
Al Marwah, Abhur Al Junoobiyah, Petoromin, An Nasim, Abrug Ar Rughamah, Al Amir Abdulmajed, Jeddah Islamic Seaport, Al
Frosya, Taibah, As Salamah, As Sarawat, Al Farouk, Ar Rewis, As Safa, Ar Rawabi, Al Baghdadiyah Al Gharbiyah, Faysalia,
Al Salamah, Mishrifah, Thuwal, Al Masarah
[delivered] => 0
[undelivered] => 1
[returnedToowner] => 0
结果要求:
[0] => Array
(
[walker_id] => 158
[walker] => سلطان 158
[main_city] => Jeddah
[sub_city] => Jeddah
[districts] => Al Muhammadiyah, Al Hamadaniyah, Abhur Aljanubiah, Al Basatin, Al Asalah, Ar Rayyan, Abur Ash Shamaliyah,
Al Murjan, As Salhiyah, Al Khalidiyah, Ar Rawadah, Az Zahra, Al Faisaliyah, An Nahdah, Ash Shati, Al Wahah, Al
Khaldiyah, Al Loaloa, Ar Rabwah, An Nuzhah, An Naim, King Abdul Aziz International Airport, Ash Sheraa, Az Zomorod, Al
Yaqoot, Al Amwaj, Al Hamra, Al Andalus, Al Aziziyah, As Samir, Al Fadeylah, Al Waha, An Nakhil, Mraykh, Ash Sharafiyah,
Al Marwah, Abhur Al Junoobiyah, Petoromin, An Nasim, Abrug Ar Rughamah, Al Amir Abdulmajed, Jeddah Islamic Seaport, Al
Frosya, Taibah, As Salamah, As Sarawat, Al Farouk, Ar Rewis, As Safa, Ar Rawabi, Al Baghdadiyah Al Gharbiyah, Faysalia,
Al Salamah, Mishrifah, Thuwal, Al Masarah
[delivered] => 16
[undelivered] => 3
[returnedToowner] => 0
[ofd] => 53
)
[1] => Array
(
[walker_id] => 158
[walker] => سلطان 158
[main_city] => Jeddah
[sub_city] => Khulais
[districts] => Al Muhammadiyah, Al Hamadaniyah, Abhur Aljanubiah, Al Basatin, Al Asalah, Ar Rayyan, Abur Ash Shamaliyah,
Al Murjan, As Salhiyah, Al Khalidiyah, Ar Rawadah, Az Zahra, Al Faisaliyah, An Nahdah, Ash Shati, Al Wahah, Al
Khaldiyah, Al Loaloa, Ar Rabwah, An Nuzhah, An Naim, King Abdul Aziz International Airport, Ash Sheraa, Az Zomorod, Al
Yaqoot, Al Amwaj, Al Hamra, Al Andalus, Al Aziziyah, As Samir, Al Fadeylah, Al Waha, An Nakhil, Mraykh, Ash Sharafiyah,
Al Marwah, Abhur Al Junoobiyah, Petoromin, An Nasim, Abrug Ar Rughamah, Al Amir Abdulmajed, Jeddah Islamic Seaport, Al
Frosya, Taibah, As Salamah, As Sarawat, Al Farouk, Ar Rewis, As Safa, Ar Rawabi, Al Baghdadiyah Al Gharbiyah, Faysalia,
Al Salamah, Mishrifah, Thuwal, Al Masarah
[delivered] => 0
[undelivered] => 1
[returnedToowner] => 0
[ofd] => 1
编辑:
我的代码:
foreach($delivered as $value){
$def[] = array(
'walker_id' => $value->confirmed_walker,
'walker' => $value->walker,
'main_city' => $value->main_city,
'sub_city' => $value->d_city,
'districts' => $value->districts,
'delivered' => $value->delivered,
'undelivered' => $value->undelivered,
'returnedToowner' => $value->toowner,
);
}
foreach($withCaptain as $value){
$dataArray[] = array(
'walker_id' => $value->walker_id,
'walker' => $value->walker,
'districts' => $value->districts,
'main_city' => $value->main_city,
'sub_city' => $value->sub_city,
'ofd' => $value->ofd,
);
}
$kv=[];
foreach($dataArray as $k => $v){
$kv[ $v['walker_id'] ] = $k; // this is considering unique walker_id and not considering city and subcity
}
foreach($def as $k => $v){
if(!isset($dataArray[$k]['delivered'])){
$dataArray[$k]['delivered'] = 0;
$dataArray[$k]['undelivered'] = 0;
}
if( array_key_exists( $v['walker_id'] , $kv ) ){
$dataArray[ $kv[$v['walker_id']] ] = array_merge( $dataArray[$kv[$v['walker_id']]] , $def[$k] );
}
}
想要结合 $def 和 $dataArray。它们都是不相等的数组。
所以基本上我想结合基于 walker_id、main_city 和 sub_city 的两个数组。
我尝试了各种不同的东西,但没有任何效果。我试过这个 Merge two associative arrays by same key
但是 temp 数组不考虑主城市和子城市,它只是根据 walker_id 进行梳理......
提前致谢
如果您需要更多详细信息,请告诉我。
解决方案
这将是一个简单的方法:
<?php
$withOfd = [
310 => [
'walker_id' => 158,
'walker' => "158 ??????????",
'districts' => "...",
'main_city' => "Jeddah",
'sub_city' => "Jeddah",
'ofd' => 25
],
311 => [
'walker_id' => 158,
'walker' => "158 ??????????",
'districts' => "...",
'main_city' => "Jeddah",
'sub_city' => "Khulais",
'ofd' => 1
]
];
$withoutOfd = [
260 => [
'walker_id' => 158,
'walker' => "158 ??????????",
'main_city' => "Jeddah",
'sub_city' => "Jeddah",
'districts' => "...",
'delivered' => 16,
'undelivered' => 3,
'returnedToowner' => 0
],
261 => [
'walker_id' => 158,
'walker' => "158 ??????????",
'main_city' => "Jeddah",
'sub_city' => "Khulais",
'districts' => "...",
'delivered' => 0,
'undelivered' => 1,
'returnedToowner' => 0
]
];
$result = [];
array_walk($withOfd, function($with) use ($withoutOfd, &$result) {
array_walk ($withoutOfd, function($without) use (&$result, $with) {
if ( $with['walker_id'] == $without['walker_id']
&& $with['main_city'] == $without['main_city']
&& $with['sub_city'] == $without['sub_city']) {
$result[] = array_merge($with, $without);
}
});
});
print_r($result);
输出显然是:
Array
(
[0] => Array
(
[walker_id] => 158
[walker] => 158 ??????????
[districts] => ...
[main_city] => Jeddah
[sub_city] => Jeddah
[ofd] => 25
[delivered] => 16
[undelivered] => 3
[returnedToowner] => 0
)
[1] => Array
(
[walker_id] => 158
[walker] => 158 ??????????
[districts] => ...
[main_city] => Jeddah
[sub_city] => Khulais
[ofd] => 1
[delivered] => 0
[undelivered] => 1
[returnedToowner] => 0
)
)
更新:
由于评论和聊天中的讨论,另一个变体保留了任一数组中没有相应条目的条目:
$result = [];
array_walk($withOfd, function($with, $withKey) use (&$withOfd, &$withoutOfd, &$result) {
array_walk ($withoutOfd, function($without, $withoutKey) use (&$withOfd, &$withoutOfd, &$result, $with, $withKey) {
if ( $with['walker_id'] == $without['walker_id']
&& $with['main_city'] == $without['main_city']
&& $with['sub_city'] == $without['sub_city']) {
$result[] = array_merge($with, $without);
unset($withOfd[$withKey]);
unset($withoutOfd[$withoutKey]);
}
});
});
$result = array_merge($result, $withOfd, $withoutOfd);
推荐阅读
- javascript - 如何在不使用 ID 的情况下在 ul 中定位 li?
- amazon-web-services - 在 CloudFormation 中创建安全组时如何指定我的 IP?
- vba - 如何在我的日历上保留被拒绝的会议?
- reactjs - 反应应用代理不工作时
包含url参数 - xcode - Xcode 打开后立即崩溃
- php - 如何在Docker中路由多个php网页的url
- tensorflow - Jetson TX2 上的 TensorFlow 导入导致分段错误(核心转储)
- c# - 图表在 Y 轴上画一条线
- java - 无法将 Liferay 页面发布到远程 Live Box
- javascript - Lambda 函数未通过 Auth0 node-auth0 SDK 调用 auth0 方法