多维数组循环不显示对象的结果

时间:2014-07-24 07:28:27

标签: php arrays multidimensional-array foreach

我从SOAP客户端获取结果作为响应。我只需要分析参数的结构并相应地显示结果。我有以下针对SerialEquipment的srucutre,我得到的结果是除了Esaco参数之外的所有参数的peoperly。 Esaco参数是一个数组对象,它位于SerialEquipment数组中。我试图从Esaco数组对象获取响应,但得到一个错误,因为为foreach提供了无效的参数。我不知道如何通过正确循环来获得Esaco参数的结果。只是在循环数组时我犯了一个小错误。

代码:

foreach($Serial as $key => $obj)
   {
        echo "<b>"."Serial Equipment=>" . $key . "</b>"."<br>";
        echo "Code=>". $obj->Code . "<br>";
        echo "Desc Short=>". $obj->Desc_Short . "<br>";
        echo "Desc Long=>". $obj->Desc_Long . "<br>";


        foreach($obj->Esaco as $key2 => $obj2)  
        {  
            if($obj2 === null){
        // doesn't contain Esaco
        break;
            }
            else{
              echo "<b>"."Esaco=>" . $key2 . "</b>"."<br>";                 
            echo "EsacoMainGroupCode=>". $obj2->EsacoMainGroupCode . "<br>";
            echo "EsacoMainGroupDesc=>". $obj2->EsacoMainGroupDesc . "<br>";
            echo "EsacoSubGroupCode=>".  $obj2->EsacoSubGroupCode . "<br>";
            echo "EsacoSubGroupCode=>".  $obj2->EsacoSubGroupDesc . "<br>";
            echo "EsacoSubGroupCode=>".  $obj2->EsacoGroupCode . "<br>";
            echo "EsacoSubGroupCode=>".  $obj2->EsacoGroupDesc . "<br>";  
        }       
        }           
     }      

if($parameter['aktion'] == 'getVehicle') 
{   
     $vehicle = getVehicleValuation();
     $Serial=$vehicle['SerialEquipment'];        
     $VehicleFuel=$vehicle['VehicleFuel'];

        foreach($VehicleFuel as $key => $obj2)
        {           
            echo "Fuel Type=>". $obj2->Fuel_Type . "<br>";
            echo "Fuel Type Code=>". $obj2->Fuel_Type_Code . "<br>";
            echo "ECE_Unit=>". $obj2->ECE_Unit . "<br>"; 
            echo "ECE_In=>". $obj2->ECE_In . "<br>";     
            echo "ECE_Out=>". $obj2->ECE_Out . "<br>";
            echo "ECE_All=>". $obj2->ECE_All . "<br>";
            echo "ECE_CO2=>". $obj2->ECE_CO2 . "<br>";                       
        }   
}

这是我的SerialEquipment结构: enter image description here

2 个答案:

答案 0 :(得分:1)

Esaco是一个对象而不是一个数组。你应该改变你的第二个foreach。

foreach($Serial as $key => $obj) {       
    echo "Serial Equipment=>" . $key . "<br>";
    echo "Code=>". $obj->Code . "<br>";
    echo "Desc Short=>". $obj->Desc_Short . "<br>";
    echo "Desc Long=>". $obj->Desc_Long . "<br>";  
    foreach($obj->Esaco as $key2 => $obj2) {
        echo $obj2;
        //...
    }           
}    

答案 1 :(得分:1)

if($parameter['aktion'] == 'getVehicle') 
{
    $vehicle = getVehicleValuation();
    if(($serials = $vehicle['SerialEquipment']) === null){
        // doesn't contain SerialEquipment
        break;
    }

    foreach($serials as $serial){
        print "Code =>" . $serial->Code . "<br>";
        print "Desc Short =>" . $serial->Desc_Short . "<br>";

        //...

        foreach($serial->Esaco as $esaco){
            print "EsacoMainGroupCode =>" . $esaco->EsacoMainGroupCode. "<br>";
            print "EsacoMainGroupDesc =>" . $esaco->EsacoMainGroupDesc. "<br>";

            //...
        }
    }
}  

对于VehicleFuel:

if($parameter['aktion'] == 'getVehicle') 
{   
 $vehicle = getVehicleValuation();
 $Serial=$vehicle['SerialEquipment'];        
 $VehicleFuel=$vehicle['VehicleFuel'];

 $fuelType = $VehicleFuel->Fuel_Type;

 // if there is only going to be one VehicleFuel object Vehicle, then just do..
 echo "Fuel Type =>". fuelType->Fuel_Type . "<br>";
 echo "Fuel Type Code =>". $fuelType->Fuel_Type_Code . "<br>";

 // if there will be more than one, you will want to use a loop...

    foreach($fuelType as $obj)
    {           
        echo "Fuel Type=>". $obj->Fuel_Type . "<br>";
        echo "Fuel Type Code=>". $obj->Fuel_Type_Code . "<br>";
        echo "ECE_Unit=>". $obj->ECE_Unit . "<br>"; 
        echo "ECE_In=>". $obj->ECE_In . "<br>";     
        echo "ECE_Out=>". $obj->ECE_Out . "<br>";
        echo "ECE_All=>". $obj->ECE_All . "<br>";
        echo "ECE_CO2=>". $obj->ECE_CO2 . "<br>";                       
    }   
}