php 一致性API响应,可以是对象或对象数组

sigwle7e  于 2023-10-15  发布在  PHP
关注(0)|答案(2)|浏览(114)

下面是JSON代码。

{
  "Artikelnr":"1000",
  "Vooraad_NL":2.0,
  "Voorraad_DE":1.0,
  "Voorraad_BE":0.0
}

当我用foreach循环json时,它循环了4次。我怎样才能使它只通过文章的数量循环。Like 1 article循环一次。当有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'];
}

}
dba5bblo

dba5bblo1#

您有以下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'];
}

循环迭代$data数组,其中包含4个元素,并且您在循环中没有使用$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'];
}
7nbnzgx9

7nbnzgx92#

我建议有条件地将遇到的任何对象转换为objectArray,并无条件地编写一个循环来重新编译objectArray。
所有应用程序都应该奋进稳定其输入/输出数据类型,以实现更精简的脚本(遗憾的是,您所访问的端点没有考虑到这一点)。
代码:(Demo

$data = json_decode($response);
if (is_object($data)) {
    $data = [$data];
}
foreach ($data as $obj) {
    var_dump($obj);
}

相关问题