dsfsfdsf4544 2013-04-21 16:48
浏览 204
已采纳

使用php为json输出创建多级数组

This is my php so far. I have my main information added first and then my dates with users who have voted for that date.

$id = $CURUSER["id"];

$eventid = $_GET['eventid'];

$z = SQL_Query_exec("SELECT * FROM cal_events WHERE eventid = '$eventid'");
$rowz = mysql_fetch_array($z);
$y = SQL_Query_exec("SELECT userid FROM cal_votes WHERE eventid = '$eventid'"); 
$y1 = mysql_num_rows($y);
$x = SQL_Query_exec("SELECT userid FROM cal_votes WHERE eventid = '$eventid' AND voted = 'no'");    
$x1 = mysql_num_rows($x);

$data = array();
            $data['eventid'] = $eventid;
            $data['eventname'] = $rowz['eventname'];
            $data['aboutevent'] = $rowz['aboutevent'];
            $data['lefttovote'] =   $x1;
            $data['enddate'] = date("D jS F Y",strtotime($rowz[enddate]));

 $caldates = SQL_Query_exec("SELECT dateid,eventdates FROM cal_dates WHERE eventid = $eventid ORDER BY dateid ASC");
               while($rowcaldates = mysql_fetch_array($caldates)){
                $data['dates'][] =  date("D jS F Y",strtotime($rowcaldates[eventdates])); 


                    $b = SQL_Query_exec("SELECT forename,surname FROM cal_voted left join users on users.id = cal_voted.userid WHERE dateid = $rowcaldates[dateid] ");
                    $c1 = mysql_num_rows($b);
                     while($rowb = mysql_fetch_array($b)){
                        $data['dates']['names'][] = "$rowb[forename] $rowb[surname],";
                            }
            }

echo json_encode($data);

Problem is my json is being return like this

    {"eventid":"23","eventname":"Mums Birthday","aboutevent":"Curry Night Alton 7pm","lefttovote":0,"enddate":"Wed 19th June 2013",
"dates":{"0":"Sat 23rd March 2013","
names":["John ,","Clare ,","Scott ,","Clare ,","Scott ,"],"1":"Sat 30th March 2013"}}

and im trying to output this. This is just a slung together example but im sure you will get the idea

 {"eventid":"23","eventname":"Mums Birthday","aboutevent":"Curry Night Alton 7pm","lefttovote":0,"enddate":"Wed 19th June 2013",
"dates":{"0":"Sat 23rd March 2013","
    names":["John,","Clare ,","Scott ,"}
"dates":{"1":"Sat 30th March 2013","
    names":["Clare ,","Scott ,"]}}

this is so i can loop through the dates and echo them out using jquery mobile. I can do it with straight php as i dont need to put them into an array but this array business is baffling

update *

$data = array();
            $data['eventid'] = $eventid;
            $data['eventname'] = $rowz['eventname'];
            $data['aboutevent'] = $rowz['aboutevent'];
            $data['lefttovote'] =   $x1;
            $data['enddate'] = date("D jS F Y",strtotime($rowz[enddate]));

 $caldates = SQL_Query_exec("SELECT dateid,eventdates FROM cal_dates WHERE eventid = $eventid ORDER BY dateid ASC");
               while($rowcaldates = mysql_fetch_array($caldates)){
                $date_data = array();
                $date_data[0] = date("D jS F Y",strtotime($rowcaldates[eventdates])); 


                    $b = SQL_Query_exec("SELECT forename,surname FROM cal_voted left join users on users.id = cal_voted.userid WHERE dateid = $rowcaldates[dateid] ");
                    $c1 = mysql_num_rows($b);
                     while($rowb = mysql_fetch_array($b)){
                        $date_data['names'] = "$rowb[forename] $rowb[surname],";
                        array_push($data,$date_data);
                            }

            }

echo json_encode($data);

output

{"eventid":"23","eventname":"Mums Birthday","aboutevent":"Curry Night Alton 7pm","lefttovote":0,"enddate":"Wed 19th June 2013","0":{"0":"Sat 23rd March 2013","names":"John ,"},"1":{"0":"Sat 23rd March 2013","names":"Clare ,"},"2":{"0":"Sat 23rd March 2013","names":"Scott ,"},"3":{"0":"Sat 30th March 2013","names":"Clare ,"},"4":{"0":"Sat 30th March 2013","names":"Scott ,"}}

update working answer *

 $caldates = SQL_Query_exec("SELECT dateid,eventdates FROM cal_dates WHERE eventid = $eventid ORDER BY dateid ASC");
               while($rowcaldates = mysql_fetch_array($caldates)){
                $date_data = array();
                $date_data[0] = date("D jS F Y",strtotime($rowcaldates[eventdates])); 


                    $b = SQL_Query_exec("SELECT forename,surname FROM cal_voted left join users on users.id = cal_voted.userid WHERE dateid = $rowcaldates[dateid] ");
                    $c1 = mysql_num_rows($b);
                     while($rowb = mysql_fetch_array($b)){

                        $date_data['names'][] = "$rowb[forename] $rowb[surname],"; 

                            }
                        array_push($data,$date_data);   
            }

echo json_encode($data);
  • 写回答

2条回答 默认 最新

  • doubi8512 2013-04-21 17:23
    关注

    This wont work because you can't use the same name (i.e. dates) to more than one childeNode:

     { "eventid":"23",
       "eventname":"Mums Birthday",
       "aboutevent":"Curry Night Alton 7pm",
       "lefttovote":0,"enddate":"Wed 19th June 2013",
       "dates":{
               "0":"Sat 23rd March 2013",
               "names":["John Hunter,","Clare Kinnear,","Scott Kinnear,"
               },
       "dates":{
               "1":"Sat 30th March 2013",
               "names":["Clare Kinnear,","Scott Kinnear,"]
               }
      }
    

    you should combine dates in an array like this:

     { "eventid":"23",
       "eventname":"Mums Birthday",
       "aboutevent":"Curry Night Alton 7pm",
       "lefttovote":0,"enddate":"Wed 19th June 2013",
       "dates":[{
               "date":"Sat 23rd March 2013",
               "names":["John Hunter,","Clare Kinnear,","Scott Kinnear,"]
               },
               {
               "date":"Sat 30th March 2013",
               "names":["Clare Kinnear,","Scott Kinnear,"]
               }]
      }
    

    To acheive this you can do:

    $n = 0;
    $caldates = SQL_Query_exec("SELECT dateid,eventdates FROM cal_dates WHERE eventid = $eventid ORDER BY dateid ASC");
        while($rowcaldates = mysql_fetch_array($caldates)){
            $data->dates[$n]->date =  date("D jS F Y",strtotime($rowcaldates[eventdates])); 
            $b = SQL_Query_exec("SELECT forename,surname FROM cal_voted left join users on users.id = cal_voted.userid WHERE dateid = $rowcaldates[dateid] ");
            $c1 = mysql_num_rows($b);
            while($rowb = mysql_fetch_array($b)){
                $data->dates[$n]->names[] = "$rowb[forename] $rowb[surname],";
            }
            $n++;
        }
    
    echo json_encode($data);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?