I am new to API integration and PHP. I recently integrated a VIN decoder into my app. Enter a vehicle's VIN into the input box, click submit, and information regarding that vehicle is returned.
The issue is some vehicles return more data than others. An Audi A4, VIN: WAUBFAFL6FA058452, returns data for all of the fields. However, a Porsche 911, VIN: WP0AB29954S696067, returns data for only some of the fields.
Here are how the outputs look.
Audi A4:
VIN: WAUBFAFL6FA058452
Engine-
Engine Displacement 1: 2 liters
Engine Displacement 2: 1984 cc's
Engine Displacement 3: 121.071108283 ci's
Engine Size: 4 cylinders
Horsepower: 220 hp
Kilowatts: 164.0540 kw
Engine Manufacturer: Audi
Engine Model: Flex Fuel Capable engine
Primary Fuel Type: Gasoline
Secondary Fuel Type: Ethanol (E85)
Porsche 911:
VIN: WP0AB29954S696067
Engine-
Engine Displacement 1: 3.6 liters
Engine Displacement 2: 3600.0 cc's
Engine Displacement 3: 219.68547874103 ci's
Engine Size: 6 cylinders
Horsepower: 415 hp
Kilowatts: 309.4655 kw
Primary Fuel Type: Gasoline
What I want to do is eliminate the gap in data caused by empty data fields. Because there is no data for "Engine Manufacturer and Engine Model," there is a gap in the output data. How can I eliminate this gap? The desired output for the Porsche 911 would therefore look like this:
Desired Porsche Output:
VIN: WP0AB29954S696067
Engine-
Engine Displacement 1: 3.6 liters
Engine Displacement 2: 3600.0 cc's
Engine Displacement 3: 219.68547874103 ci's
Engine Size: 6 cylinders
Horsepower: 415 hp
Kilowatts: 309.4655 kw
Primary Fuel Type: Gasoline
Here is my php code:
<?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);
$data = array();
foreach ($json['Results'][0] as $k => $v){
if ($k == "DisplacementCC"){
$k = "Engine Displacement 2";
}
if ($k == "DisplacementCI"){
$k = "Engine Displacement 3";
}
if ($k == "DisplacementL"){
$k = "Engine Displacement 1";
$v = round($v,1);
}
if ($k == "EngineKW"){
$k = "Kilowatts";
}
if ($k == "EngineManufacturer"){
$k = "Engine Manufacturer";
}
if ($k == "EngineModel"){
$k = "Engine Model";
}
if ($k == "FuelTypePrimary"){
$k = "Primary Fuel Type";
}
if ($k == "FuelTypeSecondary"){
$k = "Secondary Fuel Type";
}
if ($k == "EngineHP"){
$k = "Horsepower";
}
if ($k == "EngineCylinders"){
$k = "Engine Size";
}
if (!empty($v)) {
$data[$k] = ($k).": ".($v);
}
}
echo $data['VIN'].'<br /><br/>';
echo "Engine-".'<br /><br />';
echo $data['Engine Displacement 1']. " liters". '<br />';
echo $data['Engine Displacement 2']. " cc's". '<br />';
echo $data['Engine Displacement 3']. " ci's". '<br />';
echo $data['Engine Size']. " cylinders". '<br />';
echo $data['Horsepower']." hp". '<br />';
echo $data['Kilowatts']." kw". '<br />';
echo $data['Engine Manufacturer']. '<br />';
echo $data['Engine Model']. '<br />';
echo $data['Primary Fuel Type']. '<br />';
echo $data['Secondary Fuel Type']. '<br /><br />';
}
else {
echo 'No Vin Inputted';
}
?>