有没有办法检查对象中的值是否设置为不使用foreach?

时间:2016-06-27 13:14:33

标签: php laravel-5

我有以下JSON对象:

{
  "screen": 1,
  "parameters": {
    "title": "Fill in the form:",
    "values": [
      {
        "id": 13,
        "type": 2,
        "name": "A",
        "label": "Lorem ipsum",
        "value": 10
      },
      {
        "id": 14,
        "type": 2,
        "name": "B",
        "label": "Lorem ipsum",
        "value": 20
      }
    ]
  }
}

在代码中,我使用$screen = /*object*/; $screen->parameters->values访问值。

是否有快速方法可以检查答案A和B的值是否已填写?我买了这样的东西:

if(isset(A) && isset(B)) { ... }

对于那些感兴趣的人,我使用laravel 5,也许有一种方法呢?

看起来我需要一个foreach,但我宁愿在这种情况下避免使用它们......

1 个答案:

答案 0 :(得分:1)

不,不是当前的结构。但是,您可以稍微更改结构以支持此功能。您可以使用对象而不是数组,并将名称用作键:

{
  "screen": 1,
  "parameters": {
    "title": "Fill in the form:",
    "values": {
      "A":{
        "id": 13,
        "type": 2,
        "label": "Lorem ipsum",
        "value": 10
      },
      "B":{
        "id": 14,
        "type": 2,
        "label": "Lorem ipsum",
        "value": 20
      }
    ]
  }
}

然后您可以使用isset方法。

isset( $screen->parameters->values->A );

你仍然可以遍历这些值,因为你可以通过将true传递给json_decode作为第二个参数来转换关联数组中的整个事物。我一个人不是我自己的答案的忠实粉丝,可能只是循环,但它仍然可以回答你的问题。

编辑:我忘记了如果你将json_decode添加为true,你也可以像这样访问你的属性:

isset( $screen['parameters']['values']['A'] );