2017-05-01 17 views
1

代わりにオブジェクトのオブジェクトを作成しようとすると、自分のコードがオブジェクトの配列を作成しています。私のプログラムへPHPでRestAPIデザイン - オブジェクトのオブジェクトを作成する代わりにオブジェクトの配列

コードここ

$output['result'] =[]; 
$query = "SELECT DISTINCT ti.`test_id`, ti.`name`, ti.`subject_id`, ti.`created_timestamp`, ti.`trainer_id`, ti.`class`, ti.`max_marks` , si.`name` as testname, ts.`validity` FROM `test_info` ti, `subject_info` si , `test_schools` ts WHERE ti.`subject_id` = si.`subject_id` AND ts.`test_id` = ti.`test_id` "; 
$sth = $dbh->prepare($query); 
if (!$sth->execute()) { 
    $dbh = null; 
    throw new Exception(-1); 
} 
$rows = $sth->fetchALL(PDO::FETCH_ASSOC); 
foreach($rows as $row){ 
    $keys = $row['test_id']; 
    $output['result'][$keys] = []; //Creating key 
    array_push($output['result'][$keys],$row); //Provide value to key 
} 
echo json_encode($output); 

Iオブジェクトの配列にJSON

$output['result'][$keys] = []; 

このリードをtest_idとして鍵を作るので、私はループ内で配列を初期化、だから私はどのように変換するたびにオブジェクトのオブジェクトへ

プログラムの出力

{ 
    "result":{ 
     "1":[ 
     { 
      "test_id":"1", 
      "name":"Physics", 
      "subject_id":"2", 
      "created_timestamp":"2017-03-23 17:55:51", 
      "trainer_id":null, 
      "class":"8", 
      "max_marks":"10", 
      "testname":"Physics", 
      "validity":"2018-04-14" 
     } 
     ], 
     "2":[ 
     { 
      "test_id":"2", 
      "name":"phys", 
      "subject_id":"2", 
      "created_timestamp":"2017-03-24 16:29:33", 
      "trainer_id":null, 
      "class":"8", 
      "max_marks":"5", 
      "testname":"Physics", 
      "validity":"2017-03-25" 
     } 
     ] 
    } 
} 

予想される出力:array_pushを使用する必要はありません

{ 
    "result":{ 
     "1":{ 
     "test_id":"1", 
     "name":"Physics", 
     "subject_id":"2", 
     "created_timestamp":"2017-03-23 17:55:51", 
     "trainer_id":null, 
     "class":"8", 
     "max_marks":"10", 
     "testname":"Physics", 
     "validity":"2018-04-14" 
     }, 
     "2":{ 
     "test_id":"2", 
     "name":"phys", 
     "subject_id":"2", 
     "created_timestamp":"2017-03-24 16:29:33", 
     "trainer_id":null, 
     "class":"8", 
     "max_marks":"5", 
     "testname":"Physics", 
     "validity":"2017-03-25" 
     } 
    } 
} 

答えて

1

、シンプルforeachループはそれを成し遂げるには十分だろう。コード行$output['result'][$keys] = [];では、配列を作成していて、それを押し込んでいただけで、割り当てだけが期待した結果を得るのに役立ちます。

に変更し、これを:

foreach($rows as $row){ 
    $keys = $row['test_id']; 
    $output['result'][$keys] = []; //Creating key 
    array_push($output['result'][$keys],$row); //Provide value to key 
} 

この:

foreach ($rows as $row) 
{ 
    $keys = $row['test_id']; 
    $output['result'][$keys] =$row ; //Creating key 
} 

Try this code snippet herecontaining sample inputs

関連する問題