2016-04-27 185 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); 

}