Форматирование вывода массива API

Я новичок в интеграции 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';
    }

?>

Любая помощь, предложения, указатели и т. д. Не будут восприниматься как должное! Огромное спасибо!

В foreach ... if (!empty($v)) { $results .= ($k).": ".($v).'<br />';}

RiggsFolly 17.08.2018 00:31

@RiggsFolly, это отлично работает. !empty - ложное утверждение, верно?

mugelloblue 17.08.2018 03:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать несколько различных типов тестов, которые могут работать пустой ($ 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 не пусто.

Другие вопросы по теме