我有以下 JSON 代码。
{
"Artikelnr":"1000",
"Vooraad_NL":2.0,
"Voorraad_DE":1.0,
"Voorraad_BE":0.0
}
当我用 foreach 循环 json 时,它循环 4 次。我怎样才能让它只循环浏览文章数量。就像 1 篇文章只循环一次。当有3篇文章时,json循环3次。
我使用以下 php 代码:
$data = json_decode(file_get_contents('php://input'), true);
if ((isset($data) && $data != "") && (json_last_error() === JSON_ERROR_NONE)) {
foreach ($data as $key => $val) {
$articlenumber = $data['Artikelnr'];
$voorraad_nl = $data['Vooraad_NL'];
$voorraad_de = $data['Vooraad_DE'];
$voorraad_be = $data['Vooraad_BE'];
}
}
您有以下
json
{
"Artikelnr":"1000",
"Vooraad_NL":2.0,
"Voorraad_DE":1.0,
"Voorraad_BE":0.0
}
所以,当你在
json_decode
之后循环播放时,你会得到这样的结果:
Array
(
[Artikelnr] => 1000
[Vooraad_NL] => 2
[Voorraad_DE] => 1
[Voorraad_BE] => 0
)
所以,当你循环 $data 时:
$data = json_decode(file_get_contents('php://input'), true);
foreach ($data as $key => $val) {
$articlenumber = $data['Artikelnr'];
$voorraad_nl = $data['Vooraad_NL'];
$voorraad_de = $data['Vooraad_DE'];
$voorraad_be = $data['Vooraad_BE'];
}
循环正在迭代包含 4 个项目的
$data
数组,并且您没有在循环内使用 $key/$val
而是使用 $data
本身,因此您会看到相同的项目 4 次。
如果你只有一个
json
那么你不需要循环,你可以简单地做同样的事情而不需要循环,例如:
echo $data['Artikelnr'];
echo $data['Vooraad_NL'];
echo $data['Voorraad_DE'];
echo $data['Voorraad_BE'];
如果您不确定结果是对象数组还是单个对象,您可以尝试这样的操作:
// Decode without passing the true in the json_encode
$data = json_decode(file_get_contents('php://input'));
if (is_object($data)) {
$data->Artikelnr;
$data->Vooraad_NL;
$data->Vooraad_DE;
$data->Vooraad_BE;
} else {
foreach ($data as $item) {
$articlenumber = $item->Artikelnr;
$voorraad_nl = $item->Vooraad_NL;
$voorraad_de = $item->Vooraad_DE;
$voorraad_be = $item->Vooraad_BE;
}
}
如果您想将每个项目用作数组,那么您可以使用
(array)
转换对象(stdClass),例如:
foreach ($data as $item) {
$item = (array) $item;
// Now you can use the item as an array
$articlenumber = $item['Artikelnr'];
// ...
}
对于单个对象也可以这样做,例如:
if (is_object($data)) {
$data = (array) $data;
$articlenumber = $data['Artikelnr'];
}
我建议有条件地将任何遇到的对象转换为 objectArrays,并无条件编写循环来迭代 objectArray。
所有应用程序都应努力稳定其输入/输出数据类型,以实现更简化的脚本编写(遗憾的是您正在访问的端点没有考虑到这一点)。
代码:(演示)
$data = json_decode($response);
if (is_object($data)) {
$data = [$data];
}
foreach ($data as $obj) {
var_dump($obj);
}