如何解决foreach循环json_encode
我正在尝试获取json值,但是我得到了:
警告:/home/myFiles/thepage.com/djs.PHP中第17行的字符串偏移'data_id'
警告:第17行的/home/myFiles/thepage.com/djs.PHP中的字符串偏移量'data_key'非法
include("func/cnfng.PHP");
include_once 'func/func.PHP'; // Functions
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(E_ALL);
$Ups = new THE_UPDATES($db);
$TheData = $Ups->Data();
$sql = MysqLi_query($db,"SELECT * FROM myData") or die(MysqLi_error($db));
$arr= [];
$row = MysqLi_fetch_array($sql,MysqLI_ASSOC);
foreach($row as $data) {
$arr[] = [
$data['data_id'] => $TheData[$data['data_key']]['English']
// ^
// |__ This is on line 17
];
}
echo json_encode($arr);
请帮我解决这个问题。
解决方法
$row = mysqli_fetch_array($sql,MYSQLI_ASSOC);
每个调用返回1行。这意味着您示例中的$row
只能(或应该)有1行。
fetch
不需要mysqli
方法,因为query
函数返回的结果对象是可迭代的。您只需要更改foreach
即可使用返回值并删除fetch
。
foreach($sql as $data) {
还可能希望将变量更改为$result
,因为它是结果而不是SQL。
我不清楚为什么/如何foreach更改返回的数据。
,在我看来,您的问题似乎是json_encode尝试将php关联数组编码为一个json数组,该数组不起作用,因为json数组要求索引为数字,并以0
递增{{ 1}},不允许有空格。
您有两个选择,要么像这样将php数组转换为对象
1
或使用数字索引json要求(0,1,2,3,...),像这样
foreach($row as $data) {
$arr[] = (object) [
$data['data_id'] => $TheData[$data['data_key']]['English']
// ^
// |__ This is on line 17
];
}
echo json_encode($arr);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。