我在使用 PHP 中的 2 个数组时遇到了很多问题。
问题: 我需要从“main_routes”和“destination”数组中确定哪些路线将有中途停留。
例如我有这个主数组:
"main_routes": [
{
"from": "RUH",
"to": "JED",
"date" : "010423"
},
{
"from": "JED",
"to": "DMM",
"date" : "040423"
},
{
"from": "NUM",
"to": "DMM",
"date" : "110423"
},
{
"from": "JED",
"to": "RUH"
"date" : "190423"
}
]
然后我有这个目的地数组来检查哪些路线有中途停留
"destination": [
{
"depDate": "010423",
"from": "RUH",
"to": "JED",
"layOver": null
},
{
"depDate": "040423",
"from": "JED",
"to": "DMM",
"layOver": null
},
{
"depDate": "110423",
"from": "NUM",
"to": "RUH",
"layOver": null
},
{
"depDate": "110423",
"from": "RUH",
"to": "DMM",
"layOver": null
},
{
"depDate": "190423",
"from": "JED",
"to": "RUH",
"layOver": null
}
]
最终结果将是这样的,因为
NUM -> DMM
在 destination
数组中被分成 2 条路线,所以如果您将它与 main_routes
数组进行比较,第一个具有 NUM -> RUH
的目的地将有一个停留值:
"final_destination": [
{
"depDate": "010423",
"from": "RUH",
"to": "JED",
"layOver": null
},
{
"depDate": "040423",
"from": "JED",
"to": "DMM",
"layOver": null
},
{
"depDate": "110423",
"from": "NUM",
"to": "RUH",
"layOver": 1600
},
{
"depDate": "110423",
"from": "RUH",
"to": "DMM",
"layOver": null
},
{
"depDate": "190423",
"from": "JED",
"to": "RUH",
"layOver": null
}
]
另一个例子:
"main_routes": [
{
"from": "RUH",
"to": "JED",
"date" : "010423"
},
{
"from": "JED",
"to": "DMM",
"date" : "040423"
},
{
"from": "NUM",
"to": "DMM",
"date" : "110423"
}
]
然后目标路线如下:
"destination": [
{
"depDate": "010423",
"from": "RUH",
"to": "JED",
"layOver": null
},
{
"depDate": "040423",
"from": "JED",
"to": "DMM",
"layOver": null
},
{
"depDate": "110423",
"from": "NUM",
"to": "RUH",
"layOver": null
},
{
"depDate": "110423",
"from": "RUH",
"to": "JED",
"layOver": null
},
{
"depDate": "110423",
"from": "JED",
"to": "DMM",
"layOver": null
}
]
最终结果是这样的:
"final_destination": [
{
"depDate": "010423",
"from": "RUH",
"to": "JED",
"layOver": null
},
{
"depDate": "040423",
"from": "JED",
"to": "DMM",
"layOver": null
},
{
"depDate": "110423",
"from": "NUM",
"to": "RUH",
"layOver": 1600
},
{
"depDate": "110423",
"from": "RUH",
"to": "JED",
"layOver": 1700
},
{
"depDate": "110423",
"from": "JED",
"to": "DMM",
"layOver": null
}
]
我有这个当前的解决方案:
function combineRoutes($route){
$segments = [];
$result = [];
$from = $route[0];
$to = $route[1];
foreach($from as $fkey => $fvalue){
$segments['from'] = $fvalue;
$segments['to'] = $to[$fkey];
$result[] = $segments;
}
return $result;
}
function layOver(){
$destination = '[{"depDate":"010423","from":"RUH","to":"JED","layOver":"null"},{"depDate":"040423","from":"JED","to":"DMM","layOver":null},{"depDate":"110423","from":"NUM","to":"RUH","layOver":null},{"depDate":"110423","from":"RUH","to":"DMM","layOver":null},{"depDate":"190423","from":"JED","to":"RUH","layOver":null}]';
$destination = json_decode($destination,true);
$parameters = '{"from":["RUH","JED","NUM","JED"],"to":["JED","DMM","DMM","RUH"]}';
$parameters = json_decode($parameters,true);
$main_routes = $this->combineRoutes([$parameters['from'],$parameters['to']]);
$countArr = count($destination);
if($countArr > 1){
for ($i=0; $i < $countArr; $i++) {
if($i == ($countArr - 1)){
return $destination;
}else{
foreach($main_routes as $mkey => $mvalue){
// dummy add layover
if(($destination[$i]['from'] == $mvalue['from']) && ($destination[$i]['to'] !== $mvalue['to'])){
$destination[$i]['layOver'] = '9000';
}
// force null for layover of segment
if(($destination[$i]['from'] !== $mvalue['from']) && ($destination[$i]['to'] == $mvalue['to'])){
$destination[$i]['layOver'] = null;
}
// dummy add layover
if(!in_array($destination[$i]['from'], $parameters['from']) && !in_array($destination[$i]['to'], $parameters['to']) ){
$destination[$i]['layOver'] = '7000';
}
}
}
}
echo json_encode($destination);exit;
}
}
对于这段代码,我得到了这个结果:
[
{
"depDate": "010423",
"from": "RUH",
"to": "JED",
"layOver": "null"
},
{
"depDate": "040423",
"from": "JED",
"to": "DMM",
"layOver": "9000"
},
{
"depDate": "110423",
"from": "NUM",
"to": "RUH",
"layOver": null
},
{
"depDate": "110423",
"from": "RUH",
"to": "DMM",
"layOver": null
},
{
"depDate": "190423",
"from": "JED",
"to": "RUH",
"layOver": null
}
]
预期结果应该是这样的:
"final_destination": [
{
"depDate": "010423",
"from": "RUH",
"to": "JED",
"layOver": null
},
{
"depDate": "040423",
"from": "JED",
"to": "DMM",
"layOver": null
},
{
"depDate": "110423",
"from": "NUM",
"to": "RUH",
"layOver": 1600
},
{
"depDate": "110423",
"from": "RUH",
"to": "DMM",
"layOver": null
},
{
"depDate": "190423",
"from": "JED",
"to": "RUH",
"layOver": null
}
]