2014-11-21 79 views
0

这是我此刻的脚本:PHP json_encode

//... PDO CONNECTION AND QUERY //...* 

$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC); 

foreach ($result as $row){ 
    $return[]=array('employeeid'=>$row['employeeid'], 
         'firstname'=>$row['firstname'], 
         'lastname'=>$row['lastname'], 
         'id'=>$row['id'], 
         'startdate'=>$row['startdate'], 
         'enddate'=>$row['enddate'], 
         'type'=>$row['type'], 
         'reason'=>$row['reason']); 
}  
$dbh = null; 

header('Content-type: application/json'); echo '' . 
json_encode($return) .''; 

这给像一个结果:

[ 
    { 
     'employeeid': '1', 
     'firstname': 'john', 
     'lastname': 'doe', 
     'id': '001', 
     ..., 
     ... 
    } 
] 

[ 
    { 
     'employeeid': '1', 
     'firstname': 'john', 
     'lastname': 'doe', 
     'id': '002', 
     ..., 
     ... 
    } 
] 

但我想是这样的结果(因此每个员工都有一个对象有多个请求):

[ 
    { 
     'employeeid': '1', 
     'firstname': 'john', 
     'lastname': 'doe', 
     'requests': [ 
      { 
       'id': '001', 
       ..., 
       ... 
      }, 
      { 
       'id': '002', 
       ..., 
       ... 
      } 
     ] 
    } 
] 

有人可以帮助我吗?

由于提前,

+1

你的循环是什么? – Brewal 2014-11-21 13:30:08

+0

那么你需要在那条路上构建你的数组。 – vaso123 2014-11-21 13:30:10

+0

并请显示您的查询。 – vaso123 2014-11-21 13:30:53

回答

0

你需要包括requests记录每个员工数组中:

foreach ($result as $row){ 
    $employee=array('employeeid'=>$row['employeeid'], 
         'firstname'=>$row['firstname'], 
         'lastname'=>$row['lastname'], 
         'id'=>$row['id'], 
         'startdate'=>$row['startdate'], 
         'enddate'=>$row['enddate'], 
         'type'=>$row['type'], 
         'reason'=>$row['reason']); 
    $requests = $dbh->query(sprintf("SELECT * FROM employee_requests WHERE employee_id = '%s'", $row['employeeid']))->fetchAll(PDO::FETCH_ASSOC); 
    $employee['requests'] = requests; 
    $return[] = $employee; 
} 
0

更改foreach如下:

foreach ($result as $row){ 
    $employeeid = $row['employeeid']; 
    if (!isset($return[$employeeid])) 
     $return[$employeeid] = array(
      'employeeid' => $row['employeeid'], 
      'firstname' => $row['firstname'], 
      'lastname' => $row['lastname'], 
      'requests' => array() 
     ); 

    $return[$employeeid]['requests'][] = array(
     'id' => $row['id'], 
     'startdate' => $row['startdate'], 
     'enddate' => $row['enddate'], 
     'type' => $row['type'], 
     'reason' => $row['reason'] 
    ); 
}