【问题标题】:How to access nested JSON objects with dynamically changed key's value如何访问具有动态更改键值的嵌套 JSON 对象
【发布时间】:2019-11-23 02:53:12
【问题描述】:

我正在尝试将 JSON 数据导入我的 PHP 脚本,但问题是这是一个嵌套的 JSON 对象,具有动态更改的键值(我已将 JSON 对象转换为 PHP 对象):

stdClass Object
(
    [665261] => stdClass Object
        (
            [id] => 665261
            [SpeiseplanName] => Campus Mensa Wismar
            [Datum] => 2019-07-12
            [KstNr] => 462
            [ArtikelText] => ein Brathering ohne Mittelgräte
            [ZusatzStoffe] => 9 Fi Gl
            [ZusatzStoffeText] => mit Süßungsmittel, Fische, Gluten
            [PeStud] => 0.75
            [PeBed] => 1.35
            [PeGast] => 1.75
            [sortierung] => 46
        )

    [665262] => stdClass Object
        (
            [id] => 665262
            [SpeiseplanName] => Campus Mensa Wismar
            [Datum] => 2019-07-12
            [KstNr] => 462
            [ArtikelText] => zwei Bratheringe ohne Mittelgräte
            [ZusatzStoffe] => 9 Fi Gl
            [ZusatzStoffeText] => mit Süßungsmittel, Fische, Gluten
            [PeStud] => 1.25
            [PeBed] => 1.9
            [PeGast] => 2.25
            [sortierung] => 47
        )

    [665263] and so on.

所以,我已经得到了这样的数据:

<p id="desc"><?= htmlReady(_($data[665261]['ArtikelText'])) ?></p>

输出结果如预期的那样是“zwei Bratheringe ohne Mittelgräte”。 但是这个数字键 665261 是动态的,每天都在变化。

那么我怎样才能用这样的键值访问日期呢?感谢您的帮助。

【问题讨论】:

  • 你有一组对象(或对象的对象),你想访问第一个对象还是遍历所有对象并输出每个对象的单个值?
  • 我想遍历所有对象并输出一些值,但不是全部。

标签: php json nested-object


【解决方案1】:

首先,您需要检查您的数组中是否存在密钥。如果它存在,那么您需要获取与该键对应的对象。之后,您可以在对象中打印您需要的任何变量。

假设您的主要对象是 $objects,而您要查找的键是 $key。然后你可以使用下面的代码。


if( isset( $objects->$key ) ) {  
    $innerObject = $objects->$key;
    echo $innerObject->ArtikelText; //prints ein Brathering ohne Mittelgräte
    echo $innerObject->PeStud; // prints 0.75
}

【讨论】:

    【解决方案2】:

    你只需要使用foreach loop,像这样:

    假设您的对象名称为$objects

    foreach ($objects as $obj) {
        echo '<p id="desc">' . htmlReady(_($obj->ArtikelText)) . '</p>';
    }
    

    或者如果你有一个数组,名称为$arrays

    foreach ($arrays as $arr) {
        echo '<p id="desc">' . htmlReady(_($arr['ArtikelText'])) . '</p>';
    }
    

    【讨论】:

    • 谢谢。但是,如果我不需要所有对象怎么办?
    • 在循环中添加 if 语句以过滤掉您的输出
    • @arsy 你想过滤掉什么?取决于哪个属性?
    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2020-11-19
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多