Я новичок в интеграции API и PHP. Недавно я интегрировал API-интерфейс VIN-декодера в свое приложение. Если VIN автомобиля введен в строку ввода и выбран submit, API извлечет соответствующие данные об этом автомобиле. Например, если я введу WAUBFAFL6FA058452 и нажму submit, я получу данные о том, что этот VIN принадлежит Audi A4 Sedan 2015 года выпуска.
Проблема, с которой я сталкиваюсь, заключается в том, что не все поля данных возвращаются с данными. Например, WAUBFAFL6FA058452 возвращает:
.
Make: Audi
Model: A4
ModelYear: 2015
VehicleType: PASSENGER CAR
Series: Premium quattro
Однако около двадцати других полей возвращаются пустыми, например:
DriveType:
DynamicBrakeSupport:
EDR:
ESC:
EVDriveUnit:
ElectrificationLevel:
Как я могу создать оператор if в моем PHP, который возвращает только категории, содержащие данные? Другими словами, такие категории, как Make, будут видны пользователю, а такие категории, как DriveType, - нет. Видимость категорий зависит от наличия данных в этой категории. Это должно быть структурировано как заявление if, потому что некоторые 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';
}
?>
Любая помощь, предложения, указатели и т. д. Не будут восприниматься как должное! Огромное спасибо!
@RiggsFolly, это отлично работает. !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 не пусто.
В foreach ...
if (!empty($v)) { $results .= ($k).": ".($v).'<br />';}