使用PHP foreach解析数组(json)


parsing array (json) with PHP foreach

我想为每个for分隔对象名称和值,这是在'ques'数组。

my array as

 [
 {
    "ques": [
        {
            "name": "comment",
            "value": "comment me for the reason",
            "sur_id": "1",
            "user_id": "admin@gmail.com",
            "pagename": "question_response"
        },
        {
            "name": "check-box[]",
            "value": "1"
        },
        {
            "name": "radio",
            "value": "radio 2"
        },
        {
            "name": "yes",
            "value": "no"
        },
        {
            "name": "date",
            "value": "2015-10-23"
        },
        {
            "name": "select-deopdown",
            "value": ""
        },
        {
            "name": "true",
            "value": "false"
        },
        {
            "name": "number",
            "value": "55"
        }
    ]
  }
]

我想从数组中分离值。现在'answer'返回null

  while ($fetch = mysql_fetch_array($query1)) {
   $content = $fetch['CONTENT_VALUES'];
  // print_r($content);
  $content_value= mb_convert_encoding($content ,"UTF-8");
    $datas = json_decode($content, true);
     foreach($datas->ques as $values)
     {
         echo $values->value . "'n";
          print_r($values);
     }
   $test[] = array('ques' =>  $datas ,'answer'=>$values);
}

您正在使用json_decode($content, true);(请参阅手册),因此这意味着您将获得一个数组,而不是一个对象。要么删除true,要么将其视为关联数组

foreach($datas[0]['ques'] as $values)

像这样修改代码:

 while ($fetch = mysql_fetch_array($query1)) {
 $content = $fetch['CONTENT_VALUES'];
  $content_value= mb_convert_encoding($content ,"UTF-8");
    $datas = json_decode($content); //To return as Object
    foreach($array[0]->ques as $values):
        echo $values->name.'<br/>'; //For example
    endforeach;
}

也许你的真正的问题是,你从来没有在循环中给$test[]分配任何东西?

无论如何-你是混合对象和数组。如上所述,从json_decode中删除true参数。下面的方法对我有用(希望我已经理解了目标是什么):

//test load of the JSON
$content = file_get_contents('test.json');
$test = array();
$datas = json_decode($content);
foreach($datas[0]->ques as $item) {
    $test[] = array('ques' => $item->name, 'answer' => $item->value);
}
然后

echo '<pre>';
print_r($test);
echo '<pre>';

输出
Array
(
    [0] => Array
        (
            [ques] => comment
            [answer] => comment me for the reason
        )
    [1] => Array
        (
            [ques] => check-box[]
            [answer] => 1
        )
    [2] => Array
        (
            [ques] => radio
            [answer] => radio 2
        )
    [3] => Array
        (
            [ques] => yes
            [answer] => no
        )
    [4] => Array
        (
            [ques] => date
            [answer] => 2015-10-23
        )
    [5] => Array
        (
            [ques] => select-deopdown
            [answer] => 
        )
    [6] => Array
        (
            [ques] => true
            [answer] => false
        )
    [7] => Array
        (
            [ques] => number
            [answer] => 55
        )
)