Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 而SQL中的循环只循环一次_Php_Sql_Arrays_While Loop - Fatal编程技术网

Php 而SQL中的循环只循环一次

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

我有一个rest服务,向数据库中的表发送get请求。我想用响应构建一个数组。我用这段代码得到了我想要的数组结构,但问题是它只循环一次。为什么会这样?如果我将第二个$result更改为$result2,它将返回false而不是编码的数组

/**
 * @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,只显示最后一个值。