在递归迭代过程中查找数组中的父关键字


Find the parent key in array during recursive iteration

考虑一个类似的数组结构

[DVTTISEGA] => Array
        (
            [attr] => Array
                (
                    [DepartureDateTime] => 2014-03-17T06:15:00
                    [ArrivalDateTime] => 2014-03-17T10:50:00
                    [RPH] => 1
                    [FlightNumber] => 4376
                    [ResBookDesigCode] => U
                    [NumberInParty] => 4
                    [Status] => 36
                    [E_TicketEligibility] => Eligible
                    [DepartureDay] => Mon
                    [Distance] => 6197
                    [DateChangeNbr] => 0
                )
            [DepartureAirport] => Array
                (
                    [attr] => Array
                        (
                            [LocationCode] => MRS
                            [CodeContext] => IATA
                            [Terminal] => MP2
                        )
                )
            [ArrivalAirport] => Array
                (
                    [attr] => Array
                        (
                            [LocationCode] => DKR
                            [CodeContext] => IATA
                        )
                )
            [OperatingAirline] => Array
                (
                    [value] => ML
                    [attr] => Array
                        (
                            [FlightNumber] => 4376
                        )
                )
            [Equipment] => Array
                (
                    [attr] => Array
                        (
                            [AirEquipType] => 735       
                        )
                )
        )

共有两个LocationCode。一个在具有关键字DepartureAirport的父数组内,另一个在ArrivalAirport内。我必须根据父关键字将LocationCode存储在单独的变量中。我正在递归地遍历数组,代码是:

function arrayTraverse($unserializedarray){
        foreach ($unserializedarray as $key => $value) {
            print "$key {'n";
                if(is_array($value)){
                    arrayTraverse($value);
                }
                else{
                    print "    $key => $value'n";
                }
            print "}'n";
        }
    }

现在,在这段代码中,我如何根据我提到的不同父键将LocationCode分配给不同的变量?

将包含所有键的数组中的路径作为函数的第二个参数。现在,您可以查看导致您获得当前值的关键点的历史记录。

function arrayTraverse( $unserializedarray, $path = array() ){
        foreach ($unserializedarray as $key => $value) {
            print "$key {'n";
                if(is_array($value)){
                    $path[] = $key;
                    arrayTraverse( $value, $path );
                }
                else{
                    print "    $key => $value'n";
                }
            print "}'n";
        }
    }

或者,您可以在不遍历数组的情况下访问值:

$departureAirportCode = $unserializedarray[ 'DVTTISEGA' ][ 'DepartureAirport' ][ 'attr' ][ 'LocationCode' ];
$arrivalAirportCode = $unserializedarray[ 'DVTTISEGA' ][ 'ArrivalAirport' ][ 'attr' ][ 'LocationCode' ];