当我尝试使用解码的JSON中的值时,我得到PHP未定义的索引错误

时间:2017-06-25 21:12:50

标签: php json indexing undefined decode

if (isset($_POST['myData'])) {
    $json = json_decode($_POST['myData'], true);
    global $phone, $name, $id_proj;
    $arr = array();
    foreach ($json as $item => $k) {
        $id_proj = $k['movieid'];
        $name = $k['name'];
        $phone = $k['phone'];
        array_push($arr, $k['sedloid']);
    }
    echo "Output $id_proj AND $name AND $phone ";
}

我从预订页面发送有关用户的一些信息。

这是我在PHP PAGE发送的JSON:
myData:[{"movieid":"1"},{"name":"Random Name"},{"phone":"0601234567"},{"sedloid":"6"},{"sedloid":"7"},{"sedloid":"8"}]

作为响应,我有未定义的索引错误,每个循环的每一行都有多次。

这是VAR_DUMP来自解码的JSON值的结果:

array (size=6)
  0 =>
    array (size=1)
      'movieid' => string '1' (length=1)
  1 =>
    array (size=1)
      'name' => string 'Random Name' (length=11)
  2 =>
    array (size=1)
      'phone' => string '0601234567' (length=10)
  3 =>
    array (size=1)
      'sedloid' => string '6' (length=1)
  4 =>
    array (size=1)
      'sedloid' => string '7' (length=1)
  5 =>
    array (size=1)
      'sedloid' => string '8' (length=1) 


我做错了什么?

3 个答案:

答案 0 :(得分:0)

这是你的第一个项目:

{"movieid":"1"}

这就是你要做的:

   $id_proj = $k['movieid'];

它有一个电影ID字段,所以没关系。

   $name = $k['name'];

它没有名称字段,因此您获得了未定义的索引。

看起来你定义数据错误是第一位的,你实际上想要发送一个具有多个字段的对象而不是一个多个对象的数组,每个对象都有一个字段

答案 1 :(得分:0)

删除json_decode()中的第二个参数。之后你会得到一个stdClass类型的对象(而不是一个关联数组),你可以直接访问它的属性,如下所示。

if (isset($_POST['myData'])) {
    $json = json_decode($_POST['myData']); // delete 'true'
    echo "Output $json->movieid AND $json->name AND $json->phone ";
}

你的json必须是这样的:

{
  "movieid":"1",
  "name":"Random Name",
  "phone":"0601234567",
  "sedloid":"6",
  "sedloid":"7",
  "sedloid":"8"
}

更准确地说,json应该如下所示:

{
  "movieid":"1",
  "name":"Random Name",
  "phone":"0601234567",
  "sedlo": {"id": "6", "id": "7", "id": "8"}
}

答案 2 :(得分:0)

我认为你的json结构是错误的,试着像这样格式化:

[{
    "movieid": "1",
    "name": "Random Name",
    "phone": "0601234567",
    "sedloid": ["6", "7", "8"]
  },
  {
    "movieid": "2",
    "name": "Random Name 2",
    "phone": "0123456",
    "sedloid": ["9", "8", "7"]
}] 

此网站检查json结构可能有所帮助:https://jsonlint.com/