2016-04-27 18 views
0

私は自分のデータベースのテーブルにget要求を送信する休憩サービスを持っています。私は応答と配列を構築したい。私はこのコードで必要な配列構造を取得しますが、問題は一度ループするだけです。どうしてこれなの? 2番目の$結果を$ result2に変更すると、エンコードされた配列の代わりにfalseが返されます。SQLのwhileループは1回だけループします

/** 
* @param int $id 
* @url periodicalitem 
* @return string 
*/ 
public function getPeriodicalItem($id){ 

    $mysqli = $this->db-> getConnection(); 

    $query = 'SELECT * FROM periodicalitem WHERE 
     periodical_id = ' . $id; 

    $result = $mysqli->query($query); 
    $arr = array(); 

    while ($row = $result->fetch_assoc()) { 

     $query = 'SELECT * FROM inst_codes WHERE id = ' . $row['inst_code'] . ''; 
     $result = $mysqli->query($query); 


     while ($row2 = $result->fetch_assoc()) { 

      if($row['inst_code'] == $row2['id']){ 
       $arr[$row2['id']] = array('name' => $row2['name'], 
              'data' => $arr[$row2['id']]['data'] ? array_push($arr[$row2['id']]['data'], $row) : array($row)); 

      } 
     } 

    } 

    return json_encode($arr); 

} 
+0

"While-loop in php ..."という意味ではありませんか? – jarlh

+0

はい、もちろんあります! – Nirakander

+0

ちょうど興味がありますが、SQLクエリのテーブルに参加するのではなく、なぜ2回ループするのですか? –

答えて

1

ループ内には、$result = $mysqli->query($query);を上書きしています。 使用別の変数

public function getPeriodicalItem($id){ 

    $mysqli = $this->db-> getConnection(); 

    $query = 'SELECT * FROM periodicalitem WHERE 
     periodical_id = ' . $id; 

    $result = $mysqli->query($query); 
    $arr = array(); 

    while ($row = $result->fetch_assoc()) { 

     $query = 'SELECT * FROM inst_codes WHERE id = ' . $row['inst_code'] . ''; 
     $result1 = $mysqli->query($query); 


     while ($row2 = $result1->fetch_assoc()) { 

      if($row['inst_code'] == $row2['id']){ 
       $arr[$row2['id']] = array('name' => $row2['name'], 
              'data' => $arr[$row2['id']]['data'] ? array_push($arr[$row2['id']]['data'], $row) : array($row)); 

      } 
     } 

    } 

    return json_encode($arr); 

} 
+0

whileループが正常に動作しているようです。各反復で値を上書きしている最後の値のみを表示するarray_pushです。 – Nirakander

0

問題は、各反復ではなく、既存のものを追加する新しい配列を作成したということでした。ここに私の作業コードです。

/** 
* @param int $id 
* @url periodicalitem 
* @return string 
*/ 
public function getPeriodicalItem($id){ 

    $mysqli = $this->db-> getConnection(); 

    $query = 'SELECT * FROM periodicalitem WHERE 
     periodical_id = ' . $id; 

    $result = $mysqli->query($query); 

    //$arr = array(); 
    while ($row = $result->fetch_assoc()) { 
     $row = array_map("utf8_encode", $row); 


     $query = 'SELECT * FROM inst_codes WHERE id = ' . $row['inst_code'] . ''; 
     $result2 = $mysqli->query($query); 

     while ($row2 = $result2->fetch_assoc()) { 
     $row2 = array_map("utf8_encode", $row2); 

        $current = array(
            'id'=>$row['id'], 
            'volume'=>$row['volume'], 
            'code' =>$row['code'], 
            'archive' => $row['archive'] 
           ); 


      if(!isset($arr[$row2['id']])){ 
       $arr[$row2['id']] = array(); 
       $arr[$row2['id']][] = array('name' => $row2['name'], 
              'prefix' => $row2['prefix'], 
              'show' => 'true'); 
      } 


       if(isset($arr[$row2['id']]['data'])){ 
        $arr[$row2['id']]['data'][] = $current; 
       }else{ 
        $arr[$row2['id']]['data'] = array($current); 
       }  
     } 


    } 
    //$arr['2']['data'][] = array($current); 

    return json_encode($arr); 

} 
関連する問題