【问题标题】:Find the parent key in array during recursive iteration在递归迭代期间查找数组中的父键
【发布时间】:2013-11-18 21:07:50
【问题描述】:

考虑这样的数组结构

[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 分配给不同的变量?

【问题讨论】:

  • 当你递归时,将$key 作为第二个参数传入。为了使初始调用成为可能,使第二个参数可选,默认为null 值。
  • @Jon:我理解你的意思,你能提供代码提示我应该在哪里分配变量在哪个条件检查?

标签: php arrays recursion


【解决方案1】:

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

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' ];

【讨论】:

  • 但是有很多实例,不仅仅是LocationCode,我必须这样做。
  • 添加了无需遍历的替代访问。希望它会有所帮助。
猜你喜欢
  • 2012-04-15
  • 2017-03-23
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 2020-03-21
  • 2017-02-02
相关资源
最近更新 更多