首页 > 解决方案 > foreach 循环 json_encode

问题描述

我正在尝试获取 json 值,但我得到:

警告:第 17 行 /home/myFiles/thepage.com/djs.php 中的非法字符串偏移 '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);

你能帮我解决一下吗,拜托。

标签: php

解决方案


$row = mysqli_fetch_array($sql, MYSQLI_ASSOC);每次调用返回 1 行。这意味着$row在您的示例中只有 1 行(或应该)。

fetch不需要该方法,mysqli因为该query函数返回一个可迭代的结果对象。您只需要更改您foreach的使用 return 并删除fetch.

foreach($sql as $data) {

也可能想要将变量更改为,$result因为它是结果而不是 SQL。

我不清楚 fetch -> foreach 为什么/如何更改返回的数据。


推荐阅读