Переформатирование PHP var_dump - PullRequest
0 голосов
/ 13 сентября 2018

Я только что подключился к веб-сервису с помощью SoapClient. Веб-служба возвращает информацию о транспортном средстве на основе конкретного ввода, VIN-кода транспортного средства. Моя переменная $result установлена ​​равной выходу веб-службы; таким образом, var_dump ($result); сбрасывает всю информацию об автомобиле. У меня трудности с расшифровкой. Вот часть вывода, который я получил для Audi VIN:

object(stdClass)#2 (14) {
    ["responseStatus"]=> object(stdClass)#3 (2) {
        ["responseCode"]=> string(10) "Successful"
        ["description"]=> string(10) "Successful"
    }
    ["vinDescription"]=> object(stdClass)#4 (11) {
        ["WorldManufacturerIdentifier"]=> string(17) "Germany Audi Nsu "
    }
}

Как я могу переформатировать вывод? Я хочу вытащить струны из этого. Например, я хотел бы переформатировать пример вывода так, чтобы он выглядел так:

Ответ: Успешно
World Id производителя: Германия Audi Nsu

Вот мой PHP-код (я пропустил имя пользователя и пароль для веб-службы):

<?php
$client = new SoapClient('http://services.chromedata.com/Description/7b?wsdl');
$account = ['number'=>"", 'secret'=>"", 'country'=>"US",    'language'=>"en"];
$vin = $_POST["b12"];

$result = $client->describeVehicle([
'accountInfo' => $account,
'vin' => $vin
]);



var_dump ($result);

?>

___________________________________________________________________________

Обнаружен еще один блокпост. Кажется, чем дальше я копаюсь в данных, тем сложнее становится вызов данных для создания новых переменных. Я пытаюсь извлечь "Audi S4", "5 Door Wagon" и "All-Wheel Drive"

Вот раздел, с которым я борюсь:

["technicalSpecification"]=>
array(97) {
 [0]=>
 object(stdClass)#640 (2) {
  ["titleId"]=>
  int(1)
  ["value"]=>
  array(2) {
    [0]=>
    object(stdClass)#641 (3) {
      ["styleId"]=>
      array(2) {
        [0]=>
        int(292015)
        [1]=>
        int(292016)
      }
      ["value"]=>
      string(7) "Audi S4"
      ["condition"]=>
      string(3) "-PT"
    }
    [1]=>
    object(stdClass)#642 (3) {
      ["styleId"]=>
      array(2) {
        [0]=>
        int(292015)
        [1]=>
        int(292016)
      }
      ["value"]=>
      string(7) "Audi S4"
      ["condition"]=>
      string(0) ""
    }
  }
}
[1]=>
object(stdClass)#643 (2) {
  ["titleId"]=>
  int(2)
  ["value"]=>
  object(stdClass)#644 (3) {
    ["styleId"]=>
    array(2) {
      [0]=>
      int(292015)
      [1]=>
      int(292016)
    }
    ["value"]=>
    string(12) "5 Door Wagon"
    ["condition"]=>
    string(0) ""
  }
}
[2]=>
object(stdClass)#645 (2) {
  ["titleId"]=>
  int(6)
  ["value"]=>
  object(stdClass)#646 (3) {
    ["styleId"]=>
    array(2) {
      [0]=>
      int(292015)
      [1]=>
      int(292016)
    }
    ["value"]=>
    string(15) "All-Wheel Drive"
    ["condition"]=>
    string(0) ""
  }
}

___________________________________________________________________________

добавив:

$resultxml = htmlentities($client->__getLastResponse()) . "\n";
echo $resultxml;

Я могу получить вывод в XML. Вот данные, из которых я пытаюсь получить переменные формы:

 <technicalSpecification>
        <titleId>1</titleId>
        <value value="Audi S4" condition="-PT">
           <styleId>292015</styleId>
           <styleId>292016</styleId>
        </value>
        <value value="Audi S4" condition="">
           <styleId>292015</styleId>
           <styleId>292016</styleId>
        </value>
     </technicalSpecification>
     <technicalSpecification>
        <titleId>2</titleId>
        <value value="5 Door Wagon" condition="">
           <styleId>292015</styleId>
           <styleId>292016</styleId>
        </value>
     </technicalSpecification>
     <technicalSpecification>
        <titleId>6</titleId>
        <value value="All-Wheel Drive" condition="">
           <styleId>292015</styleId>
           <styleId>292016</styleId>
        </value>
     </technicalSpecification>

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Попробуйте отобразить элемент HTML pre над ним, он должен выглядеть следующим образом:

<code><?php
$client = new SoapClient('http://services.chromedata.com/Description/7b?wsdl');
$account = ['number'=>"", 'secret'=>"", 'country'=>"US",    'language'=>"en"];
$vin = $_POST["b12"];

$result = $client->describeVehicle([
'accountInfo' => $account,
'vin' => $vin
]);

echo "<pre>";
var_dump ($result);
echo "
"; // необязательно ?>

Либо используйте print_r () .

0 голосов
/ 13 сентября 2018

Использование var_dump обычно облегчает программисту тестирование результатов определенных значений, например, что вы сделали. Однако в вашем случае, если вы очень уверены в результате возврата структура данных , я предлагаю вам переформатировать результат, распечатав нужные данные:

Неправильный демонстрационный скрипт доступа к значениям:

<?php
$client = new SoapClient('http://services.chromedata.com/Description/7b?wsdl');
$account = ['number'=>"", 'secret'=>"", 'country'=>"US",    'language'=>"en"];
$vin = $_POST["b12"];

$result = $client->describeVehicle([
'accountInfo' => $account,
'vin' => $vin
]);

if(property_exists($result, 'responseCode') && property_exists($result,'WorldManufacturerIdentifier')){
    echo "Response : ".$result['responseStatus']['responseCode']."<br>World Manufacturer Id : ".$result['vinDescription']['WorldManufacturerIdentifier']."<br>";
}else{
    echo "The returned data is not complete!"; //or other proper error messages
}
?>

Отредактированный правильный скрипт находится здесь:

<?php
$client = new SoapClient('http://services.chromedata.com/Description/7b?wsdl');
$account = ['number'=>"", 'secret'=>"", 'country'=>"US",    'language'=>"en"];
$vin = $_POST["b12"];

$result = $client->describeVehicle([
'accountInfo' => $account,
'vin' => $vin
]);

if(property_exists($result, 'responseCode') && 
property_exists($result,'WorldManufacturerIdentifier')){
    echo "Response : ".$result->responseStatus->responseCode."<br>World Manufacturer Id : ".$result->vinDescription->WorldManufacturerIdentifier."<br>";
}else{
    echo "The returned data is not complete!"; //or other proper error messages
}
?>

Для последней части XML вам необходимо обернуть дополнительные теги вокруг результата XML, прежде чем загружать его вручную. Использование getElementsByTagName () и getAttribute позволяет мне загрузить результат с помощью функции цикла:

<?php
$doc = new DOMDocument();
$doc->loadXML('<some><technicalSpecification><titleId>1</titleId><value 
value="Audi S4" condition="-PT"><styleId>292015</styleId> 
<styleId>292016</styleId></value><value value="Audi S4" condition=""> 
<styleId>292015</styleId><styleId>292016</styleId></value> 
</technicalSpecification><technicalSpecification><titleId>2</titleId><value 
value="5 Door Wagon" condition=""><styleId>292015</styleId> 
<styleId>292016</styleId></value></technicalSpecification> 
<technicalSpecification><titleId>6</titleId><value value="All-Wheel Drive" 
condition=""><styleId>292015</styleId><styleId>292016</styleId></value> 
</technicalSpecification></some>');
$childs = $doc->getElementsByTagName("technicalSpecification");
foreach($childs as $child){
    $value = $child->getElementsByTagName("value")[0]->getAttribute("value");
echo $value;
}
...