Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php foreach循环json_编码_Php - Fatal编程技术网

Php foreach循环json_编码

Php foreach循环json_编码,php,Php,我正在尝试获取json值,但我得到: 警告:第17行/home/myFiles/thepage.com/djs.php中的非法字符串偏移量“data_id” 警告:第17行/home/myFiles/thepage.com/djs.php中的非法字符串偏移量“data_key” 你能帮我解决这个问题吗?这个$row=mysqli\u fetch\u数组($sql,mysqli\u ASSOC)每次调用返回1行。这意味着在您的示例中,$row只有一行(或应该) mysqli不需要fetch方法,因

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

警告:第17行/home/myFiles/thepage.com/djs.php中的非法字符串偏移量“data_id”

警告:第17行/home/myFiles/thepage.com/djs.php中的非法字符串偏移量“data_key”


你能帮我解决这个问题吗?

这个
$row=mysqli\u fetch\u数组($sql,mysqli\u ASSOC)每次调用返回1行。这意味着在您的示例中,
$row
只有一行(或应该)

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

foreach($sql as $data) {
还可能需要将变量更改为
$result
,因为它是一个结果而不是SQL


我不清楚fetch->foreach为什么/如何更改返回的数据。
$row=mysqli\u fetch\u数组($sql,mysqli\u ASSOC)每次调用返回1行。这意味着在您的示例中,
$row
只有一行(或应该)

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

foreach($sql as $data) {
还可能需要将变量更改为
$result
,因为它是一个结果而不是SQL


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

在我看来,您的问题是,json_encode试图将php关联数组编码为json数组,但该数组不起作用,因为json数组要求索引为数值形式,并以
0
递增
1
,不允许有间隙

您有两个选项,或者像这样转换为php数组对象

foreach($row as $data) { 
    $arr[] = (object) [
        $data['data_id'] => $TheData[$data['data_key']]['English'] 
        // ^
        // |__ This is on line 17
    ];
} 
echo json_encode($arr);
或者像这样使用数字索引(0,1,2,3,…)


在我看来,您的问题是json_encode试图将php关联数组编码为json数组,但该数组不起作用,因为json数组要求索引为数值形式,以
0
递增
1
,不允许有间隙

您有两个选项,或者像这样转换为php数组对象

foreach($row as $data) { 
    $arr[] = (object) [
        $data['data_id'] => $TheData[$data['data_key']]['English'] 
        // ^
        // |__ This is on line 17
    ];
} 
echo json_encode($arr);
或者像这样使用数字索引(0,1,2,3,…)


@user3783243 var_dump($arr)是
string(52)[{“1”:“Pages”}、{“l”:null}、{“l”:null}、{“D”:null}]“
和var_dump($data);是
string(1)“1”string(9)“pages”string(9)“pages”string(6)“Pagos”
看起来只是显示第一行,数据库中有600行。@user3783243更新了问题的更多细节。
var\u dump($arr)
不应提供。那是以后的错误和无关。
foreach($sql as$data){
有什么回报?@user3783243现在我得到了所有结果,没有任何错误。在代码中使用
die(mysqli_error($conn));
是一个非常糟糕的主意,因为它可能会泄漏敏感信息。更多解释请参阅本文:@user3783243 var_dump($arr)是
string(52)[{“1”:“Pages”}“
和var_dump($data);is
字符串(1)“1”字符串(9)“pages”字符串(9)“pages”字符串(9)“pages”字符串(6)“Pagos”
看起来只是显示第一行,数据库中有600行。@user3783243更新了问题,并提供了更多详细信息。
var_dump($arr)
不应该被提供。那是在错误之后,与此无关。
foreach($sql as$data){
返回了什么?@user3783243现在我得到了所有结果,没有任何错误。使用
die(mysqli_error($conn))是一个非常糟糕的主意;
在您的代码中,因为它可能会泄漏敏感信息。有关详细说明,请参阅本文: