2014-11-21 7 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', 
       ..., 
       ... 
      } 
     ] 
    } 
] 

Может кто-нибудь помочь мне с этим?

Спасибо заранее,

Jan

+1

Какая точка вашего цикла? – Brewal

+0

, тогда вам нужно построить свой массив таким образом. – vaso123

+0

И, пожалуйста, покажите свой запрос. – vaso123

ответ

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'] 
    ); 
}