更改API数据输出的布局

2024-05-18

我是 API 集成和 PHP 的新手。我最近将 VIN 解码器集成到我的应用程序中。在输入框中输入车辆的 VIN,选择提交,然后就会显示 API 数据库中有关该车辆的所有信息。

数据存储为关联数组,其中包含类别及其相应元素。例如,对于 VIN:WAUBFAFL6FA058452,类别之一是 Make,其元素是 Audi。

有些 VIN 比其他车辆携带更多数据。我只希望在选择提交时显示带有数据的类别。因此,在一些帮助下,我添加了这行代码:

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

我的下一个障碍是获取输出、类别及其元素,并组织/格式化它们,同时保持我上面定义的逻辑。我只想显示带有数据的类别。

我不确定如何针对单个类别来格式化它们。目前,输出按字母顺序显示。我想定义我自己的输出布局。

电流输出:

AirBagLocCurtain: All Rows
AirBagLocFront: 1st Row (Driver & Passenger)
AirBagLocSide: 1st Row (Driver & Passenger)
BodyClass: Sedan/Saloon
DisplacementCC: 1984
DisplacementCI: 121.071108283
DisplacementL: 1.984000
And so on....

我怎样才能改变这个布局?我希望将输出布局更改为如下所示。

期望的输出:

VIN: WAUBFAFL6FA058452

General – 
Make: AUDI
ModelYear: 2015
Model: A4
BodyClass: Sedan/Saloon
Doors: 4
Series: Premium quattro
VehicleType: PASSENGER CAR

Safety - 
AirBagLocCurtain: All Rows
AirBagLocFront: 1st Row (Driver & Passenger)
AirBagLocSide: 1st Row (Driver & Passenger)
SeatBeltsAll: Manual

Engine - 
DisplacementCC: 1984
DisplacementCI: 121.071108283
DisplacementL: 1.984000
EngineCylinders: 4
EngineHP: 220
EngineKW: 164.0540
EngineManufacturer: Audi
EngineModel: Flex Fuel Capable engine
TransmissionStyle: Automatic
OtherEngineInfo: Fuel: Gas (50-St); Federal / California Emission        Standard: BIN 5 / ULEV II; Emissions Certification Test Group: FVGAV02.0AUB / FVGAJ02.0AUF E85
FuelTypePrimary: Gasoline
FuelTypeSecondary: Ethanol (E85)

Factory - 
Manufacturer: AUDI
ManufacturerId: 1149
PlantCity: Ingolstadt
PlantCountry: Germany

Other - 
ErrorCode: 0 - VIN decoded clean. Check Digit (9th position) is correct
TPMS: Indirect

这是我的 html 代码,只有输入栏和提交按钮:

<!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="processvin3.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>

和我的 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){
      if (!empty($v)) {
        $results .= ($k).": ".($v).'<br />';
      }
    }

    echo $results;
  }

    else {
    echo 'No Vin Inputted';
    }




?>

如有任何建议、提示或答案,我们将不胜感激。非常感谢。


我建议使用“主”数组来过滤和准备按类别分组的数据。请参阅内嵌注释以获取更多说明:

Code: (Demo https://3v4l.org/o9WSN)

你的主阵:

$master = [
    "General" => [
        "Make" => "",
        "ModelYear" => "",
        "Model" => "",
        "BodyClass" => "",
        "Doors" => "",
        "Series" => "",
        "VehicleType" => ""
    ],
    "Safety" => [
        "AirBagLocCurtain" => "",
        "AirBagLocFront" => "",
        "AirBagLocSide" => "",
        "SeatBeltsAll" => ""
    ],
    "Engine" => [
        "DisplacementCC" => "",
        "DisplacementCI" => "",
        "DisplacementL" => "",
        "EngineCylinders" => "",
        "EngineHP" => "",
        "EngineKW" => "",
        "EngineManufacturer" => "",
        "EngineModel" => "",
        "TransmissionStyle" => "",
        "OtherEngineInfo" => "",
        "FuelTypePrimary" => "",
        "FuelTypeSecondary" => ""
    ],
    "Factory" => [
        "Manufacturer" => "",
        "ManufacturerId" => "",
        "PlantCity" => "",
        "PlantCountry" => ""
    ],
    "Other" => [
        "ErrorCode" => "",
        "TPMS" => ""
    ]
];

加工:

foreach ($master as $category => &$items) {  // allow modification of $master data with &
    foreach ($items as $k => &$v) {          // allow modification of $master data with &
        if (isset($json['Results'][0][$k]) && strlen($json['Results'][0][$k])) {  // only bother to process/display desired keys and non-empty values
            $new = $json['Results'][0][$k];
            if ($k == "DisplacementCC") {
                $v = "Engine Displacement 2: $new cc's";
            } elseif ($k == "DisplacementCI") {
                $v = "Engine Displacement 3: $new ci's";
            } elseif ($k == "DisplacementL") {
                $v = "Engine Displacement 1: " . round($new, 1) . " liters";
            } elseif ($k == "EngineKW") {
                $v = "Kilowatts: $new kw";
            } elseif ($k == "EngineManufacturer") {
                $v = "Engine Manufacturer: $new";
            } elseif ($k == "EngineModel") {
                $v = "Engine Model: $new";
            } elseif ($k == "FuelTypePrimary") {
                $v = "Primary Fuel Type: $new";
            } elseif ($k == "FuelTypeSecondary") {
                $v = "Secondary Fuel Type: $new";
            } elseif ($k == "EngineHP") {
                $v = "Horsepower: $new hp";
            } elseif ($k == "EngineCylinders") {
                $v = "Engine Size: $new cylinders";
            } else {
                $v = "$k: $new";
            }
        } else {
            unset($master[$category][$k]);  // remove unwanted element from master
        }
    }
}

unset($items, $v);  // just as a precaution to eliminate the referenced variables

echo "<div id=\"VIN\">{$json['Results'][0]['VIN']}</div>\n\n";
// now iterate the updated $master multi-dimensional array and only display the "good stuff"
foreach ($master as $category => $items) {
    if (!empty($items)) {  // only display categories & rows of data when the category holds 1 or more values
        echo "<div class=\"group\">$category -</ br>";
        foreach ($items as $v) {
            echo "<div class=\"row\">$v</div>";
        }
        echo "</div>";
    }
}

Output:

<div id="VIN">WAUBFAFL6FA058452</div>

<div class="group">General -</ br>
    <div class="row">Make: AUDI</div>
    <div class="row">ModelYear: 2015</div>
    <div class="row">Model: A4</div>
    <div class="row">BodyClass: Sedan/Saloon</div>
    <div class="row">Doors: 4</div>
    <div class="row">Series: Premium quattro</div>
    <div class="row">VehicleType: PASSENGER CAR</div>
</div>

<div class="group">Safety -</ br>
    <div class="row">AirBagLocCurtain: All Rows</div>
    <div class="row">AirBagLocFront: 1st Row (Driver & Passenger)</div>
    <div class="row">AirBagLocSide: 1st Row (Driver & Passenger)</div>
    <div class="row">SeatBeltsAll: Manual</div>
</div>

<div class="group">Engine -</ br>
    <div class="row">Engine Displacement 2: 1984 cc's</div>
    <div class="row">Engine Displacement 3: 121.071108283 ci's</div>
    <div class="row">Engine Displacement 1: 2 liters</div>
    <div class="row">Engine Size: 4 cylinders</div>
    <div class="row">Horsepower: 220 hp</div>
    <div class="row">Kilowatts: 164.0540 kw</div>
    <div class="row">Engine Manufacturer: Audi</div>
    <div class="row">Engine Model: Flex Fuel Capable engine</div>
    <div class="row">TransmissionStyle: Automatic</div>
    <div class="row">OtherEngineInfo: Fuel: Gas (50-St); Federal / California Emission Standard: BIN 5 / ULEV II; Emissions Certification Test Group: FVGAV02.0AUB / FVGAJ02.0AUF E85</div>
    <div class="row">Primary Fuel Type: Gasoline</div>
    <div class="row">Secondary Fuel Type: Ethanol (E85)</div>
</div>

<div class="group">Factory -</ br>
    <div class="row">Manufacturer: AUDI</div>
    <div class="row">ManufacturerId: 1149</div>
    <div class="row">PlantCity: Ingolstadt</div>
    <div class="row">PlantCountry: Germany</div>
</div>

<div class="group">Other -</ br>
    <div class="row">ErrorCode: 0 - VIN decoded clean. Check Digit (9th position) is correct</div>
    <div class="row">TPMS: Indirect</div>
</div>

*注意,您可以使用!empty()而不是isset() then strlen()只有当你知道你永远不会拥有0作为有效值。empty()会出错0作为“假”/“空”值,并默默地调用从主数组中删除该元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改API数据输出的布局 的相关文章

  • 将位置映射到时区

    我需要获取给定地址 位置的时区 假设如有必要 可以将地址 位置反向地理编码 使用谷歌 为纬度 经度 这意味着我可能没有邮政编码 我真的希望谷歌为此提供某种 API 但似乎他们没有 至少你可以在谷歌上搜索 华盛顿特区的时间 并获取时间 TZ
  • 在 HTML TextArea 中设置(或读取)光标/插入符的值

    我正在尝试 但失败了 在 HTML 文本区域中实现拖放机制 使用 jQuery 或 Scriptaculous 我们都使用 拖放机制相对容易 因此我愿意接受使用这两者之一的答案 问题是 我似乎找不到读取或设置插入点的方法 我最终想要做的是确
  • 使用 jQuery 的 .trigger('dragstart') 实现 HTML5 的拖放功能时如何 .setData/.getData

    当使用 jQuery 的 trigger dragstart 在具有 ondragstart drag event 属性的元素上触发函数时 如何使用 setData getData 实现 HTML5 在触摸设备上的拖放 流程示例 用户通过
  • WooCommerce:用文本覆盖购物车价格

    我们有很多产品具有以下功能 No price 零价格 我们让它们可以通过内置挂钩购买 但购物车仍然将它们显示为具有0 price结账时 我们希望购物车和结帐摘要显示 特殊订单 或任何其他文本 但 WooCommerce 似乎使基于文本的价格
  • 使用时间序列数据和scaleBand指定D3条形图上的刻度

    我尝试为具有时间序列数据的 d3 v4 条形图指定多个刻度和多个刻度标签 如下图所示 基于本教程 https bl ocks org zigahertz 1ee4965ff76514517bb7ce6af21e5d44我有一个处理时间序列数
  • Django 未在 404 页面上应用应用程序中的 CSS 文件

    姜戈3 0 8 Python 3 7 x 我有一个包含一些应用程序的 Django 项目 我正在尝试为 400 403 404 500 错误制作一些 默认 错误页面 我已经这样做了 并显示了适当的模板 但没有任何样式或 JS 在 404 错
  • PHP header() 和 jquery mobile

    我想使用 php header Location newpage php 进行重定向 我没有收到错误 但 Jquery mobile 似乎无法加载目标页面 并且地址栏仍保留旧地址 请问您有什么建议吗 Thanks 尝试添加data ajax
  • 如何在 Laravel 5 中处理嵌套的 JSON 对象请求?

    我们在 Laravel 5 和 AngularJs Ionic 中运行此 Web 服务来处理 Web 当我们将请求从 Web 客户端 发送到 Web 服务 后端 时 我们传递了嵌套的 JSON 对象 我们在读取服务器端父对象下的所有子对象时
  • CSV 从 UTF8 到 ISO-8859-1

    我正在尝试修改我的 CSV 导出 但它不会将我的 CSV 从 UTF 8 转换 保存为 ISO 8859 1 请问我做错了什么吗 实际上自从修改了这个之后 我得到了一个空的 CSV 文件 php 7 0 x function my Gene
  • 输入元素可滚动并启用文本溢出省略号

    当我添加text overflow ellipsis对于输入元素 该元素是可滚动的 当我将光标放在元素上时 我可以左右滚动 就好像文本是全宽并且没有被截断一样 尽管后面没有文本 我该如何阻止这种行为 input width 180px te
  • 在 MySQL 中搜索多个单词

    我使用 HTML 表单来允许用户查找数据库表中的条目
  • 适用于 HTML5 混合应用程序的 CORS

    我读过很多关于 CORS 的文章 以及允许 Access Control Allow Origin 如何成为 Web 服务器的安全漏洞 但没有一篇文章解释了如何允许 HTML5 混合应用程序访问某些不允许使用通配符 的域上托管的 Web 服
  • Qcut Pandas:ValueError:Bin 边缘必须是唯一的

    我使用 Pandas 中的 Qcut 将数据离散化为大小相等的存储桶 我想要有价格桶 这是我的数据框 productId sell prix categ popularity 11997 16758760 0 28 75 50 524137
  • 禁用 iframe 中的滚动

    有没有办法在 iframe 中禁用所有滚动 我有一个 iframe 其中内容超出了 iframe 尺寸 设置scrolling no 只会删除滚动条 但不会禁用滚动 我无法控制 iframe html 的头部 所以我无法设计它的样式 有任何
  • 转换MAC地址格式

    我刚刚编写了一个小脚本 从交换机中提取数百个 MAC 地址进行比较 但它们的格式为 0025 9073 3014 而不是标准的 00 25 90 73 30 14 我对如何转换它感到困惑 我能想到的最好的办法就是在 处将它们分解成碎片 然后
  • 使用js获取选择选项的onclick事件

    我有一个非常令人沮丧的问题 我有这个代码 它过滤掉我的结果并将它们输入到选择框中 var syn
  • HTML 布局:向现有网站添加侧边栏

    我有一个网站 其正文如下所示 div div div div div div 这些中没有使用绝对 相对定位技巧divs 但是有很多floats clears margins and padding这些风格divs 及其内部元素 所有这些都会
  • PHP - 查找和比较日期

    你好 我有 foreach 我可以在其中获取数据库中的事件数据 我使用数据库中的日期名称 例如 event date 我需要在一个 div 中比较具有相同日期和输出的操作 例如我有这个事件 活动一 9 月 13 日 活动二 9 月 1 日
  • CSS交付优化:如何推迟CSS加载?

    我在尝试着优化 CSS 交付遵循针对开发人员的谷歌文档https developers google com speed docs insights OptimizeCSSDelivery example https developers
  • Laravel 5 注销特定用户

    在我的 laravel 5 应用程序中 有一个功能允许具有管理员角色的用户重置非管理员的任何人的密码 但这不会强制该人注销并再次登录 更改密码后如何强制用户注销 我没有对用于验证用户身份或任何内容的中间件进行任何更改 我不知道它是否有效 但

随机推荐

  • PLSql 返回值

    我再次使用一些 PLSql 我想知道 是否有任何方法可以像选择一样使用以下函数 而不必将其转换为函数或过程 这样我就可以从包含它的脚本中看到代码 代码如下 DECLARE outpt VARCHAR2 1000 flow rI VARCHA
  • C# List 内部结构

    将对象添加到集合 例如 List 时到底会发生什么 List
  • 所以,我有 6 个“主”文件,然后分为 40 个单独的文件

    我将简要描述我想要的内容 我有 6 个 主 文件 每个文件包含 40 个工作表 如下所示 AG 工作簿有 HR Gp 1 到 HR Gp 40 ER 工作簿有 FB Gp 1 到 Gp 40 等 所有工作表都已 平坦 我已经成功创建了一个适
  • 为什么n++执行速度比n=n+1快?

    在C语言中 为什么n 执行速度快于n n 1 int n n int n n n 1 我们的老师在今天的课堂上问了这个问题 这不是家庭作业 如果您正在开发一个 石器时代 编译器 的情况下 石器时代 n比n 比n n 1 机器通常有incre
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 定期更新 SWT 会导致 GUI 冻结

    Problem 当 GUI 字段定期更新时 SWT 会冻结 我想要一个基于 SWT 的 GUI 其中文本字段的值会定期递增 最初我从单独的线程访问 textField 导致抛出异常 线程 Thread 0 org eclipse swt S
  • IntelliJ IDEA 中多个 SVN 分支的工作流程

    我想使用 IntelliJ IDEA 在 SVN 主干和一个或几个功能分支之间轻松切换 最好能够同时在多个分支上工作 我有一些 本地 配置 例如用于集成测试的数据库设置和启用的调试日志记录 我想继续使用而不是提交到 SVN 各种选择的优缺点
  • NSQ Docker Swarm

    我尝试在 Docker Swarm 中使用 NSQ 但没有成功 mhlg rpi nsq 是为 Raspberry Pi ARM7 板构建的 Docker 映像 如果作为普通 Docker 容器运行 我可以确认其工作正常 在 Docker
  • 如何根据形状字段值将两个不同的形状添加到 D3 力向图?

    我是D3的新手 我正在使用力定向图 我想在节点的位置添加两种不同类型的形状 我的 json 如下 nodes name 00 00 00 00 00 00 00 01 group 0 shape 1 name 00 00 00 00 00
  • 如何终止Lua脚本?

    如何终止 Lua 脚本 现在我在 exit 方面遇到问题 我不知道为什么 这更像是一个 Minecraft ComputerCraft 问题 因为它使用了包含的 API 这是我的代码 while true do if turtle dete
  • wordpress - 像 stackoverflow 中那样内嵌 ajax 注释

    我有一个 WordPress 博客 希望为人们提供与 stackoverflow 中添加评论相同的用户体验 有很多评论 ajax 插件 但我找不到一个可以使用的插件 它允许您在主页上内联 进入并添加评论 而无需先深入到单独的单个帖子页面 任
  • 使用浮点/双除法比较可约分数

    假设我有两个分数 a b 和 c d 其中 a b c d 都是大于 0 的整数 使用以下函数检查它们的相等性是否安全 bool are equal fractions int a int b int c int d return stat
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • JS 保留以零结尾的小数[重复]

    这个问题在这里已经有答案了 在JavaScript中 是否可以 锁定 十进制数 以保留以零结尾的 浮点数 例如 我有 2 个不同的数字 如下所示 伪代码 let a 1 0 let b 1 00 a b true should be fal
  • 用户泄漏、libc++ 泄漏或误报

    我正在使用 clang 编译器和 libc 标准库在 C 11 中的 mac 上构建动态库 当我在链接到动态库的测试代码上运行 valgrind 时 我得到一块肯定丢失的内存 这是 valgrind 报告 45659 36 bytes in
  • std::Optional 的转发引用构造函数的约束

    std optional截至目前 有 8 个构造函数 如下所示 也在这里http en cppreference com w cpp utility 可选 可选 http en cppreference com w cpp utility
  • android中listview显示数据库中的数据

    我是安卓新手 我想知道如何在列表视图中显示数据库中的数据 它不会向数据库添加数据 我只是显示我们存储在数据库中的任何内容 请帮助我实现这一目标 提前致谢 使用这些课程可能会对您有所帮助 用于数据库创建 package com example
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • 更改API数据输出的布局

    我是 API 集成和 PHP 的新手 我最近将 VIN 解码器集成到我的应用程序中 在输入框中输入车辆的 VIN 选择提交 然后就会显示 API 数据库中有关该车辆的所有信息 数据存储为关联数组 其中包含类别及其相应元素 例如 对于 VIN