2016-04-27 308 views
0

我有一個休息服務,我發送一個獲取請求到我的數據庫中的表。我想用響應構建一個數組。我用這段代碼得到了我想要的數組結構,但問題是它只循環一次。爲什麼是這樣?如果我將第二個$ result更改爲$ result2,它將返回false而不是編碼數組。SQL中while循環只循環一次

/** 
* @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循環在PHP ...」嗎? – jarlh

+0

當然是的! – Nirakander

+0

只是好奇,爲什麼你循環兩次,而不是加入您的SQL查詢中的表? –

回答

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); 

}