API 数据的条件区分大小写
Conditional Case Sensitivity with API Data
我是 API 集成和 PHP 的新手。我最近在我的应用程序中集成了一个 VIN 解码器。在输入框中输入车辆的VIN,点击提交,返回车辆相关信息。
我一直在根据自己的喜好格式化数据输出。特别是车辆制造数据。 Make 数据全部大写。例如,Audi 输出为 AUDI。为了解决这个问题,我添加了以下代码:
$data = array();
foreach ($json['Results'][0] as $k => $v){
if ($k == "Make"){
$v = strtolower($v);
$v = ucwords($v);
}
}
这次改版后,AUDI变成了Audi,太棒了。我 运行 对 BMW 和 Mercedes-Benz 等品牌的问题很感兴趣。添加后,它们将显示为 Bmw 和 Mercedes-benz。我尝试添加简单的 if 语句来解决这个问题,但我一直没有成功。
关于如何为我创建的大写规则创建例外有什么想法吗?
这是我的 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="processvin4.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 代码尝试了 if 语句:
<?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 == "Make"){
$v = strtolower($v);
$v = ucwords($v);
if ($v == "BMW"){
$v = "BMW";
}
if ($v == "MERCEDES-BENZ"){
$v = "Mercedes-Benz";
}
}
if (!empty($v)) {
$data[$k] = ($k).": ".($v);
}
}
echo $data['Make']. '<br />';
}
else {
echo 'No Vin Inputted';
}
?>
感谢您的帮助!
要简单地修复您正在尝试的问题,您只需将 strtolower
放入 "else"
if ($k == "Make"){
if ($v == "BMW"){
$v = "BMW";
}
else if ($v == "MERCEDES-BENZ"){
$v = "Mercedes-Benz";
}
else {
$v = strtolower($v);
$v = ucwords($v);
}
}
您的 if
语句将永远不起作用,您在检查之前转换文本,交换顺序并使其成为 elseif
语句:
if ($k == "Make"){
$v = strtolower($v);
$v = ucwords($v);
if ($v == "BMW"){
$v = "BMW";
}
if ($v == "MERCEDES-BENZ"){
$v = "Mercedes-Benz";
}
}
变为:
if ($k == "Make"){
if ($v == "BMW"){
$v = "BMW";
}
else if ($v == "MERCEDES-BENZ"){
$v = "Mercedes-Benz";
}else{
$v = strtolower($v);
$v = ucwords($v);
}
}
只需创建包含异常的数组并从中替换:
$v = strtolower($v);
$nameExceptions = [
'bmw' => 'BMW',
'mercedes-benz' => 'Mercedes-Benz'
];
if(isset($nameExceptions[$v])) {
$v = $nameExceptions[$v];
}
else {
$v = ucwords($v);
}
我是 API 集成和 PHP 的新手。我最近在我的应用程序中集成了一个 VIN 解码器。在输入框中输入车辆的VIN,点击提交,返回车辆相关信息。
我一直在根据自己的喜好格式化数据输出。特别是车辆制造数据。 Make 数据全部大写。例如,Audi 输出为 AUDI。为了解决这个问题,我添加了以下代码:
$data = array();
foreach ($json['Results'][0] as $k => $v){
if ($k == "Make"){
$v = strtolower($v);
$v = ucwords($v);
}
}
这次改版后,AUDI变成了Audi,太棒了。我 运行 对 BMW 和 Mercedes-Benz 等品牌的问题很感兴趣。添加后,它们将显示为 Bmw 和 Mercedes-benz。我尝试添加简单的 if 语句来解决这个问题,但我一直没有成功。
关于如何为我创建的大写规则创建例外有什么想法吗?
这是我的 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="processvin4.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 代码尝试了 if 语句:
<?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 == "Make"){
$v = strtolower($v);
$v = ucwords($v);
if ($v == "BMW"){
$v = "BMW";
}
if ($v == "MERCEDES-BENZ"){
$v = "Mercedes-Benz";
}
}
if (!empty($v)) {
$data[$k] = ($k).": ".($v);
}
}
echo $data['Make']. '<br />';
}
else {
echo 'No Vin Inputted';
}
?>
感谢您的帮助!
要简单地修复您正在尝试的问题,您只需将 strtolower
放入 "else"
if ($k == "Make"){
if ($v == "BMW"){
$v = "BMW";
}
else if ($v == "MERCEDES-BENZ"){
$v = "Mercedes-Benz";
}
else {
$v = strtolower($v);
$v = ucwords($v);
}
}
您的 if
语句将永远不起作用,您在检查之前转换文本,交换顺序并使其成为 elseif
语句:
if ($k == "Make"){
$v = strtolower($v);
$v = ucwords($v);
if ($v == "BMW"){
$v = "BMW";
}
if ($v == "MERCEDES-BENZ"){
$v = "Mercedes-Benz";
}
}
变为:
if ($k == "Make"){
if ($v == "BMW"){
$v = "BMW";
}
else if ($v == "MERCEDES-BENZ"){
$v = "Mercedes-Benz";
}else{
$v = strtolower($v);
$v = ucwords($v);
}
}
只需创建包含异常的数组并从中替换:
$v = strtolower($v);
$nameExceptions = [
'bmw' => 'BMW',
'mercedes-benz' => 'Mercedes-Benz'
];
if(isset($nameExceptions[$v])) {
$v = $nameExceptions[$v];
}
else {
$v = ucwords($v);
}