如何在 PHP 中使用键和值从 2 个数组中识别将要停留的路线?

问题描述 投票:0回答:0

我在使用 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
            }
        ]
php arrays laravel multidimensional-array slim
© www.soinside.com 2019 - 2024. All rights reserved.