格式化API数组输出

时间:2018-08-16 22:26:19

标签: php html arrays api

我是API集成和PHP的新手。我最近将VIN解码器API集成到了我的应用中。如果将车​​辆的VIN输入到输入栏中,并且选择了 submit ,则API将检索与该车辆有关的数据。例如,如果我输入WAUBFAFL6FA058452并单击 submit ,我将收到该VIN属于2015 Audi A4 Sedan的数据。

我遇到的问题是,并非所有数据字段都随数据一起返回。例如,WAUBFAFL6FA058452返回:

Make: Audi
Model: A4
ModelYear: 2015
VehicleType: PASSENGER CAR
Series: Premium quattro

但是,大约有20个左右的其他字段返回空白,例如:

DriveType:
DynamicBrakeSupport:
EDR:
ESC:
EVDriveUnit:
ElectrificationLevel:

如何在PHP中创建仅返回包含数据的类别的if语句?换句话说,诸如Make之类的类别对用户将是可见的,而诸如DriveType之类的类别将对用户不可见。类别的可见性取决于具有数据的该类别。这需要以if语句的形式进行构造,因为某些VIN承载的数据比其他VIN多,反之亦然。

我已经尝试了大约一个小时,但未成功。

这是我的代码:

<!DOCTYPE html>
<html>

<head>
<title>VIN Decoder API Test</title>

<style type="text/css">
input,button {width: 200px;display: block;margin-left: auto;margin-right: auto;}
button {width: 100px;background-color: darkgray;}
</style>

</head>

<body>

    <form action="processvin.php" method="post">

    <input type="text" id="b12" placeholder="Enter VIN" name="b12" maxlength="100"/>
    <br>
    <button id="submit_btn">Submit</button>

  </form>

  <br>
  <br>

</body>
</html>

processvin.php

<?php

$vin = $_POST["b12"];

if ($vin) {
    $postdata = http_build_query([
            'format' => 'json',
            'data' => $vin
        ]
    );
    $opts = [
        'http' => [
            'method' => 'POST',
            'content' => $postdata
        ]
    ];

    $apiURL = "https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/";
    $context = stream_context_create($opts);
    $fp = fopen($apiURL, 'rb', false, $context);
    $line_of_text = fgets($fp);
    $json = json_decode($line_of_text, true);
    fclose($fp);

    foreach ($json['Results'][0] as $k => $v){
      $results .= ($k).": ".($v).'<br />';
    }
    echo $results;
  }
    else {
    echo 'No Vin Inputted';
    }

?>

任何帮助,建议,指示等都不会被视为理所当然!非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试几种可能适用于 empty($ v),isset($ v),is_null($ v)或strcmp($ v,“”)的测试。由于这是JSON,因此很有可能$ v中的空白值存储为“”。因此,您可能应该从empty()开始。但请尝试看看。

foreach ($json['Results'][0] as $k => $v){
    if (!empty($v)){
         $results .= ($k).": ".($v).'<br />';
    }
}

这只会在$ v不为空时添加结果。