考虑一个类似的数组结构
[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' ];