微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

foreach循环json_encode

如何解决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 举报,一经查实,本站将立刻删除。