我正在获取json数据
$sql=mysqli_query($con,"select * FROM mohamiusermeta where meta_key='websiteurl' or meta_key='profile_photo' or meta_key = 'Office' or meta_key='address_user' or meta_key='agentarea' or meta_key='offertext' or meta_key='officename' or meta_key='cover_photo' or meta_key='membertype' order by user_id desc");
$newarray = array();
$subArray = array();
while($row=mysqli_fetch_assoc($sql))
{
$output[$row['meta_key']] = $row['meta_value'];
$subArray[user_id]=$row['user_id'];
$subArray[Office]=$output['Office'];
$subArray[officename]=$output['officename'];
$subArray[address_user]=$output['address_user'];
$subArray[profile_photo]=$output['profile_photo'];
$subArray[cover_photo]=$output['cover_photo'];
$subArray[agentarea]=$output['agentarea'];
$subArray[offertext]=$output['offertext'];
$subArray[websiteurl]=$output['websiteurl'];
$subArray[membertype]=$output['membertype'];
$newarray[] = $subArray;
}
json_encode($newarray);
echo(json_encode($newarray,JSON_UNESCAPED_UNICODE));
mysqli_close();
?>
但浏览器中的结果为数据库
中具有值的第一行的null和重复值获取数组有什么问题? 在浏览器中查看结果访问http://lifecareclub.net/api/test.php
答案 0 :(得分:0)
当您修改 $newarray
的成员时,您正在修改下一次迭代中已添加到$subArray
的内容。
要解决此问题,请在第一次分配到其中一个键之前,在循环内移动$subArray = array();
。这样你就可以在每次迭代中创建一个 new 数组,这样就可以减少它的数量。"从您在上一次迭代中分配给其成员的数据。
注意:您需要在$subArray['user_id'] = ...
和其他作业中使用引号,但我认为这是您提问中的拼写错误。
答案 1 :(得分:0)
我可以看到一些问题,包括从数据库中提取查询结果并转换为数组的方式。一般来说,为了调试这样的问题,你应该看看你的变量值,看看它们是否符合预期。
例如,如果你把
var_dump($output);
在您开始使用$output
设置$subArray
中的值之前,在循环中,您会看到它没有您认为的所有信息。
附注:如果您使用Ajax来调用该函数,则需要学习使用浏览器的调试工具来查看从服务器返回的确切数据。这样您就可以返回非JSON结果并查看实际情况。在这种情况下,您将看到返回的数据实际上是一条错误消息,可帮助您确定下一步。
我不想为您编写代码,但您可以采取以下措施来改进代码。我假设officename
之类的东西是数据库表中由SELECT
语句返回的列。
$sql=mysqli_query($con,"select * FROM mohamiusermeta where meta_key IN ('websiteurl', 'profile_photo', 'Office', 'address_user', 'agentarea', 'offertext' , 'officename', 'cover_photo', 'membertype') order by user_id desc");
$newarray = array();
while($row = mysqli_fetch_assoc($sql))
{
$subArray = array();
$subArray[$row['meta_key']] = $row['meta_value'];
$subArray['user_id'] = $row['user_id'];
$subArray['Office'] = $row['Office'];
$subArray['officename'] = $row['officename'];
$subArray['address_user'] = $row['address_user'];
$subArray['profile_photo'] = $row['profile_photo'];
$subArray['cover_photo'] = $row['cover_photo'];
$subArray['agentarea'] = $row['agentarea'];
$subArray['offertext'] = $row['offertext'];
$subArray['websiteurl'] = $row['websiteurl'];
$subArray['membertype'] = $row['membertype'];
$newarray[] = $subArray;
}
echo(json_encode($newarray,JSON_UNESCAPED_UNICODE));
mysqli_close();
我改变的事情:
IN
来缩短列表并使其更清晰。$output
$subArray
样式说明:
最后一点说明:看起来所有代码所做的只不过是制作$row
的新副本。考虑将所有内容替换为$newarray[] = $row;
并将meta_key和meta_value交给javascript端。