PHP数组类stdClass的对象无法转换为字符串

时间:2014-07-23 10:34:48

标签: php arrays soap parameters

我从SOAP客户端得到以下参数作为响应。参数Serial Equipment显示第一个值然后给出错误,因为类stdClass的对象无法转换为字符串。我有许多值来自Serial Equipment参数及其数组。所以不知道如何显示所有值

代码:

function getVehicleValuation()
{

    $client = new SoapClient($wsdl, $options);
    $result = $client->getVehicleValuation($params);    
    $return = array(

                                'Serial Equipment' => $result->vehicle->SerialEquipment

                                );
    return $return; 
}

尝试显示此代码的结果:

  if($parameter['aktion'] == 'getVehicle') 
    { 
    ob_start();
    var_dump(Login());
    $s = ob_get_clean();
     $returned_array=getVehicleValuation();
    foreach($returned_array as $objects) 
    {
        foreach($objects as $key => $obj) 
        {       
        echo "key.: " . $key . "<br>";
        echo $obj->Code . "<br>";
        echo $obj->Desc_Short . "<br>";
        echo $obj->Desc_Long . "<br>";
        echo $obj->Esaco . "<br>";
        } 
    }  

}       

当我使用简单的var_dump(SerialEquipment)时,输出将得到结果:

array (size=1) 

    'Serial Equipment' => 
        array (size=41)
          0 => 
            object(stdClass)[6]
              public 'Code' => int 204093
              public 'Desc_Short' => string 'Ablagefach mittig in Gepäckraumtrennwand;ESACO_UG(122)' (length=55)
              public 'Desc_Long' => string 'Ablagefach mittig in Gepäckraumtrennwand inkl. verschiebbarem Haltenetz' (length=72)
              public 'Esaco' => 
                object(stdClass)[7]
                  ...
          1 => 
            object(stdClass)[8]
              public 'Code' => int 160452
              public 'Desc_Short' => string 'Airbag für Fahrer und Beifahrer, 2-stufi;ESACO_UG(103)' (length=55)
              public 'Desc_Long' => string 'Airbag für Fahrer und Beifahrer 2-stufig' (length=41)
              public 'Esaco' => 
                array (size=2)
                  ...
          2 => 
            object(stdClass)[11]
              public 'Code' => int 195607
              public 'Desc_Short' => string 'Airbag: Kopf- u. Seiten - Airbags vorn;ESACO_UG(104,102)' (length=56)
              public 'Desc_Long' => string 'Airbag: Seitenairbag für Fahrer und Beifahrer (Kopf/Thorax)' (length=60)
              public 'Esaco' => 
                array (size=2)
                  ...

2 个答案:

答案 0 :(得分:0)

如果$ result-&gt; vehicle-&gt; SerialEquipment返回一个数组,您应该使用该数组来填充您的密钥'Serial Equipment'的值。

尝试print_r($ result-&gt; vehicle-&gt; SerialEquipment);在你的PHP代码中调查内容。

现在由你决定用它来做什么。您想将该阵列的完整内容传输到您的密钥“串行设备”吗?或者只是几个值?

如果你想要将$ result-&gt; vehicle-&gt; SerialEquipment打包成一个字符串的WHOLE结构(无论它是什么),请看看JSON。 Json可以将数组转换为可以分配的字符串。

在分配到您的密钥'Serial Equipment'之前打包它,因此它包含一个字符串。 然后在接收时解压缩。

看看这里:

http://php.net/manual/en/function.json-encode.php

http://php.net/manual/en/function.json-decode.php

答案 1 :(得分:0)

由于返回的值是数组,因此必须循环其项。 尝试像

这样的东西
foreach($returned_array as $key => $val) {
    if (is_array($val)) {
        echo $key . ' => ' . "<br/>";
        foreach($val as $k => $v) {
            echo '&nbsp;&nbsp;' . $k . ' ' . $v . '<br/>';
        }
    }
    else {
        echo $key . ' ' . $val . '<br/>';
    }
}

这是一个代码示例,可以扩展它并编写一个递归函数,它将显示一个更复杂的结构,如下所示:http://dev.armage.org/wiki/doku.php?id=web:php:debug