I am getting some data from a database and am encoding it to json:
$json = "";
if($result = $dbc->query($query)) {
$num = $result->num_rows;
for($i = 0; $i < $num; $i++) {
$row = $result->fetch_array();
$json .= json_encode($row);
if($i != ($num-1)) {
$json .= ',';
}
}
}
but instead of getting the json string in the format:
{"name:"joe", "age":"22", "etc":"etc"}
I'm getting every value duplicated because it is giving me the element name as being both the index of an associative and non-associative array. So I'm getting:
{"0":"joe", "name":"joe", "1":"22", "age":"22", "3":"etc", "etc":"etc"}
While I can still use the json. It is still twice the size that I want it to be and so not efficient. Is there anyway I can get the json_encode method to just give me the associative array inices as the json tags? (Wrong words to describe these things no doubt)
Many thanks
解决方案
This is because you are using fetch_array() (emphasis mine):
mysqli_fetch_array() is an extended version of the mysqli_fetch_row() function. In addition to storing the data in the numeric indices of the result array, the mysqli_fetch_array() function can also store the data in associative indices, using the field names of the result set as keys.
Use fetch_assoc() instead.