Php 而SQL中的循环只循环一次
我有一个rest服务,向数据库中的表发送get请求。我想用响应构建一个数组。我用这段代码得到了我想要的数组结构,但问题是它只循环一次。为什么会这样?如果我将第二个$result更改为$result2,它将返回false而不是编码的数组Php 而SQL中的循环只循环一次,php,sql,arrays,while-loop,Php,Sql,Arrays,While Loop,我有一个rest服务,向数据库中的表发送get请求。我想用响应构建一个数组。我用这段代码得到了我想要的数组结构,但问题是它只循环一次。为什么会这样?如果我将第二个$result更改为$result2,它将返回false而不是编码的数组 /** * @param int $id * @url periodicalitem * @return string */ public function getPeriodicalItem($id){ $mysqli = $this->
/**
* @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);
}
你写得太多了,
$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);
}
问题是,每次迭代都会创建一个新数组,而不是附加已有的数组。这是我的工作代码
/**
* @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);
}
你的意思是“php中的While loop…”只是好奇,为什么在sql查询中要循环两次而不是连接表?@RaphaelMüller我认为这更容易,因为第二个查询依赖于第一个查询。但我相信也有办法加入它们?while循环似乎工作正常。它是在每次迭代中覆盖值的数组_push,只显示最后一个值。