代码之家  ›  专栏  ›  技术社区  ›  Coolen

将结果查询回送到数组

  •  -2
  • Coolen  · 技术社区  · 7 年前

    我想将查询的结果回送到数组中。

    这些是原始行:

    {
    $locations = array();
    $locations[0] = array("image"=>"https://www.XX.nl/assets/img/prinsenhof.png","lat"=>"52.012136","lng"=>"4.354596","emp_name"=>"Museum Prinsenhof Delft","emp_id"=>"Museum Prinsenhof Delft");
    $locations[1] = array("image"=>"https://www.XX.nl/assets/img/ampelman.png","lat"=>"51.8988595","lng"=>"4.4186571","emp_name"=>"Ampelmann Operations","emp_id"=>"Ampelmann Operations");
    $locations[2] = array("image"=>"https://www.XX.nl/assets/img/koekamp.png","lat"=>"52.0821565","lng"=>"4.3202341","emp_name"=>"Koekamp The Hague","emp_id"=>"Koekamp The Hague");
    $locations[3] = array("image"=>"","lat"=>"51.9179543","lng"=>"4.3986012","emp_name"=>"Grote of Sint Janskerk Schiedam","emp_id"=>"Grote of Sint Janskerk Schiedam");
    $locations[4] = array("image"=>"","lat"=>"52.0596095","lng"=>"4.2219163","emp_name"=>"The International School of The Hague","emp_id"=>"The International School of The Hague");
    $locations[5] = array("image"=>"","lat"=>"52.012663","lng"=>"4.3558941","emp_name"=>"Oude Kerk","emp_id"=>"Oude Kerk");
    $locations[6] = array("image"=>"","lat"=>"52.0769897","lng"=>"4.3170919","emp_name"=>"Spuiplein","emp_id"=>"Spuiplein");
    $locations = json_encode($locations);
    }
    

    所以我把这个信息放到数据库里,我想显示出来 我就是这样做的:

        $qry = "SELECT image, lat, lng, name, emp_id FROM googlemaps";
            if(!$result = $connection->query($qry)) {
                echo 'Fout in query: '.$mysqli->error;
            } else {
            $a = 0; 
            while ($location = $result->fetch_assoc()){
    
        $locations[$a] .= array("image"=>"https://www.XXXX.nl/assets/img/".$location['image'],"lat"=>$location['lat'],"lng"=>$location['lng'],"emp_name"=>$location['name'],"emp_id"=>$location['emp_id']);
        $a++;
                }
            }
            echo $locations;
    echo $locations = json_encode($locations);
    

    有什么更好的办法吗?

    错误:

    Notice: Undefined offset: 0 in /index.php on line 137
    Notice: Array to string conversion in /index.php on line 137
    Notice: Array to string conversion in /index.php on line 137
    Notice: Array to string conversion in /index.php on line 141
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Schwern    7 年前
    Notice: Undefined offset: 0 in /index.php on line 137
    Notice: Array to string conversion in /index.php on line 137
    Notice: Array to string conversion in /index.php on line 137
    

    这是因为:

    $locations[$a] .= array("image"=>"https://www.XXXX.nl/assets/img/".$location['image'],"lat"=>$location['image'],"lng"=>$location['lng'],"emp_name"=>$location['name'],"emp_id"=>$location['emp_id']);
    

    第一个告诉你 $locations[0] 不存在。其余的是因为您试图对一个没有意义的数组进行字符串附加。

    Notice: Array to string conversion in /index.php on line 141
    

    这是因为 echo $locations; . 不能将数组转换为字符串。你需要使用 var_dump print_r .


    关于如何做到这一点。第一, turn on mysqli exceptions so you don't have to constantly check for error .

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    

    然后遍历行 pushing 上的新结果 locations 使用 locations[] = array(...) .

    $result = $connection->query("SELECT image, lat, lng, name, emp_id FROM googlemaps");
    while ($location = $result->fetch_assoc()){
        $locations[] = array(
            "image" =>  "https://www.XXXX.nl/assets/img/".$location['image'],
            "lat"   =>  $location['lat'],
            "lng"   =>  $location['lng'],
            "emp_name"  =>  $location['name'],
            "emp_id"    =>  $location['emp_id']
        );
    }
    

    您可以通过在查询中执行所有操作来提高效率。

    $result = $connection->query(<<<QUERY
        SELECT
            CONCAT("https://www.XXXX.nl/assets/img/", image),
            lat,
            lng,
            name as emp_name,
            emp_id
        FROM googlemaps
    QUERY
    );
    while ($location = $result->fetch_assoc()){
        # now use $location directly
    }
    

    这样就避免了复制每一行,也避免了在内存中构建可能巨大的行数组。

    如果你真的需要建立 $locations ,您现在可以通过 fetch_all 而且速度有点快。

    $locations = $result->fetch_all;