2016-08-11 71 views
0

它的返回是这样的:数组返回重复JSON数据

[ 
     { 
     "0": "1", 
     "1": "Udon House", 
     "2": "food", 
     "3": "31.5076701", 
     "4": "74.3544522", 
     "5": "a trip to the landa.", 
     "6": "images/udonHouse.jpg", 
     "place_id": "1", 
     "place_name": "Udon House", 
     "category": "food", 
     "lat": "31.5076701", 
     "lon": "74.3544522", 
     "description": "a trip to the landa.", 
     "db_image": "images/udonHouse.jpg" 
     }, 
     { 
     "0": "5", 
     "1": "Lahore Meuseum", 
     "2": "attractions", 
     "3": "31.5681556", 
     "4": "74.3061492", 
     "5": "want to discover histroy?", 
     "6": "images/badshahi.jpg", 
     "place_id": "5", 
     "place_name": "Lahore Meuseum", 
     "category": "attractions", 
     "lat": "31.5681556", 
     "lon": "74.3061492", 
     "description": "want to discover histroy?", 
     "db_image": "images/badshahi.jpg" 
     } 
    ] 

这是我的PHP代码:

<?php 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="tourist"; // Database name 
    $con = mysqli_connect("$host", "$username", "$password","$db_name")or die("cannot connect"); 

if($con){ 

    mysqli_set_charset($con ,'utf8'); 

    $user_id = $_POST['user_id']; 

    $qry = 

    ("SELECT p.* 
FROM 
    places p INNER JOIN 
    favorites f ON p.place_id = f.place_id INNER JOIN 
    user u ON u.id = f.user_id 
WHERE 
    u.id = $user_id"); 

    $query=mysqli_query($con ,$qry);   

    if (!$query) { 
       $message = 'Invalid query: ' . mysqli_error() . "\n"; 
       $message .= 'Whole query: ' . $qry; 
       die($message); 
    } 

    $return_arr = array(); 


    $num_rows = mysqli_num_rows($query); 
    if ($num_rows > 0) { 
     while ($r = mysqli_fetch_array($query)) { 


      header('Content-Type: application/json'); 

      array_push($return_arr,$r); 
     } 
     echo json_encode($return_arr); 
    } 
    } 

?> 

为什么返回行两次在一个对象,我只希望与名称不符的数据我在这里做错了什么? 请提供任何建议或替代解决方案?

+5

默认情况下'mysqli_fetch_array'返回数字和关联数组的结果,你可以使用第二个参数来设置你想要的那一个,它将是'mysqli_fetch_array($ query,MYSQLI_ASSOC);' – cmorrissey

+2

,因为你正在抓取数组,我不使用mysqli但我认为有这样的mysqli_fetch_array($查询,MYSQLI_ASSOC)这将保持您的数组的键而不是你不需要的索引 –

+1

@cmorrissey^_^ –

回答

0

通过默认mysqli_fetch_array功能,使用MYSQLI_BOTH作为其“结果类型”。

您需要将第二个参数设置为MYSQLI_ASSOC以使其仅返回键名称。

while ($r = mysqli_fetch_array($query, MYSQLI_ASSOC)){ 
    array_push($return_arr,$r); 
} 

P.S. header('Content-Type: application/json');只需要调用一次,因此请将其从while循环中取出。