Javascript 格式化JSON数据并在PHP for循环中显示

Javascript 格式化JSON数据并在PHP for循环中显示,javascript,php,jquery,json,Javascript,Php,Jquery,Json,我有一些表单数据,我正在使用jQuery以JSON格式保存(这一切都很好) 但是我想获取JSON数据并将其显示在PHP for循环中。这就是我遇到问题的地方,因为jQuery的serializeArray和JSON.stringify只是将每个表单值添加到一个位块中,例如 check in, check out, room, adults, children, check in, check out, room, adults, children, check in, check out, ro

我有一些表单数据,我正在使用jQuery以JSON格式保存(这一切都很好)

但是我想获取JSON数据并将其显示在PHP for循环中。这就是我遇到问题的地方,因为jQuery的serializeArray和JSON.stringify只是将每个表单值添加到一个位块中,例如

check in, check out, room, adults, children, check in, check out, room, adults, children, check in, check out, room, adults, children
但是我想把每个房间分开

(Room 1) check in, check out, room, adults, children
(Room 2) check in, check out, room, adults, children
(Room 3) check in, check out, room, adults, children 
JSFiddle如何创建表单数据(一切正常):

我正在使用PHP尝试在for循环中显示JSON数据(不起作用):


您应该使用
$data作为$key
echo$key['name']

 <?php 

$json_data = '[{"name":"check_in","value":"07/11/2017"},{"name":"check_out","value":"07/26/2017"},{"name":"room_type","value":"option_1"},{"name":"adults","value":"2"},{"name":"children","value":"3"},{"name":"check_in","value":"07/27/2017"},{"name":"check_out","value":"07/29/2017"},{"name":"room_type","value":"option_2"},{"name":"adults","value":"3"},{"name":"children","value":"2"}]';

$data = json_decode($json_data, true); 
// echo "<pre>";
// print_r($data);
$i=0;
foreach($data as $key) {
  if($i==2) break;
 echo 'Name: '.$key['name'];
 echo "<br>";
 echo 'Value: '.$key['value'];
 echo "<br>";
$i++;
 } 
 ?>

问题在于如何构建JSON。由于在表单上使用了
serializeArray()
,每个项都有自己的对象,这意味着您不知道哪个房间的属性是什么

要解决此问题,请使用
map()
构建每个房间的对象数组。像这样:

[{
  "check_in": "07/04/2017",
  "check_out": "07/10/2017",
  "room_type": "option_1",
  "adults": "1",
  "children": "1"
}, {
  "check_in": "07/28/2017",
  "check_out": "07/31/2017",
  "room_type": "option_3",
  "adults": "3",
  "children": "3"
}]

其结果将采用以下格式,其中每个对象都包含房间的属性。然后可以很容易地对其进行迭代:

<?php 

$json_data = '[{"name":"check_in","value":"07/11/2017"},{"name":"check_out","value":"07/26/2017"},{"name":"room_type","value":"option_1"},{"name":"adults","value":"2"},{"name":"children","value":"3"},{"name":"check_in","value":"07/27/2017"},{"name":"check_out","value":"07/29/2017"},{"name":"room_type","value":"option_2"},{"name":"adults","value":"3"},{"name":"children","value":"2"}]';

$data = json_decode($json_data, true); 

//print_r($data);

foreach($data as $key => $val) {
foreach($val as $val_key=>$val_val) {
    echo $val_key.":".$val_val."</br>";
}
} 
?>

我认为这应该行得通

<?php 

$json_data = '[{"name":"check_in","value":"07/11/2017"},{"name":"check_out","value":"07/26/2017"},{"name":"room_type","value":"option_1"},{"name":"adults","value":"2"},{"name":"children","value":"3"},{"name":"check_in","value":"07/27/2017"},{"name":"check_out","value":"07/29/2017"},{"name":"room_type","value":"option_2"},{"name":"adults","value":"3"},{"name":"children","value":"2"}]';

$data = json_decode($json_data); 

foreach(array_slice($data,0,2) as $key => $val) {

 echo $val->name."-".$val->value."<br>";

} ?>

用于读取json值,您可以使用来保留前两个元素。请尝试以下方法:



如果无法修改从数据库获取数据的方式,则可以
array\u chunk()
4
的间隔解码JSON,以创建所需的子数组。(请记住:这在很大程度上取决于数据是以4组的形式呈现的)
echo$key
不会提供您想要的数据,但是数字数组索引我可以在jQuery中修改JSON数据的格式(如果必要的话)-这样做会更好,还是以4的间隔对解码的JSON进行数组_chunk()处理?我理解,但目前它显示$key的10个值(因为保存了10位数据),但我只想显示2个$key,每个保存的表单显示1个,如果有意义的话?我使用了简单的逻辑。。运行循环2次,然后我断开循环。。我想你需要这种类型的代码。。有更新吗?这就是你所期待的吗@博斯特
<?php 

$json_data = '[{"name":"check_in","value":"07/11/2017"},{"name":"check_out","value":"07/26/2017"},{"name":"room_type","value":"option_1"},{"name":"adults","value":"2"},{"name":"children","value":"3"},{"name":"check_in","value":"07/27/2017"},{"name":"check_out","value":"07/29/2017"},{"name":"room_type","value":"option_2"},{"name":"adults","value":"3"},{"name":"children","value":"2"}]';

$data = json_decode($json_data, true); 

//print_r($data);

foreach($data as $key => $val) {
foreach($val as $val_key=>$val_val) {
    echo $val_key.":".$val_val."</br>";
}
} 
?>
<?php 

$json_data = '[{"name":"check_in","value":"07/11/2017"},{"name":"check_out","value":"07/26/2017"},{"name":"room_type","value":"option_1"},{"name":"adults","value":"2"},{"name":"children","value":"3"},{"name":"check_in","value":"07/27/2017"},{"name":"check_out","value":"07/29/2017"},{"name":"room_type","value":"option_2"},{"name":"adults","value":"3"},{"name":"children","value":"2"}]';

$data = json_decode($json_data); 

foreach(array_slice($data,0,2) as $key => $val) {

 echo $val->name."-".$val->value."<br>";

} ?>