gpt4 book ai didi

PHP json_encode 将数字索引创建为字符串而不是对象

转载 作者:行者123 更新时间:2023-12-04 02:06:03 26 4
gpt4 key购买 nike

我在 PHP 中有以下示例代码:

$data = array(
'hello',
'world',
'hi'
);

$ret = array();
$ret['test'] = array();
$ret['testing'] = array();

foreach($data as $index => $value){
if($index < 1){
$ret['test'][$index]['val'] = $value;
$ret['test'][$index]['me'] = 'index < 1';
}
else {
$ret['testing'][$index]['val'] = $value;
$ret['testing'][$index]['me'] = 'index >= 1';
}
}

echo json_encode($ret);

我希望这是 JSON 输出:

[{
"test":[
{
"val": "hello",
"me": "index < 1"
}
],
"testing":[
{
"val": "world",
"me": "index >= 1"
},
{
"val": "hi",
"me": "index >= 1"
}
]
}]

但是,最终发生的是我得到以下结果:

[{
"test":[
{
"val": "hello",
"me": "index < 1"
}
],
"testing":{
"1":{
"val": "world",
"me": "index >= 1"
},
"2":{
"val": "hi",
"me": "index >= 1"
}
}
}]

"1""2"尽管是 int 键仍出现尽管 test 的渲染正确当使用相同的计数器变量时。有什么办法可以确保 testing变成一个 JSON 对象数组?

最佳答案

因为数组不是以索引 0 开头,而是以索引 1 开头,所以它被编码为 JSON 对象而不是 JSON 数组。

您可以使用 array_values() 函数删除索引,只保留值。

例子:

$ret['testing'] = array_values($ret['testing'])
echo json_encode($ret);

但是因为此时你不需要索引,你也可以将你的代码重构为:

foreach($data as $index => $value){
if($index < 1){
$ret['test'][] = array(
'val' => $value,
'me' => 'index < 1'
);
}
else {
$ret['testing'][] = array(
'val' => $value,
'me' => 'index >= 1'
);
}
}
echo json_encode($ret);

这样,数组将始终以索引 0 开头。

关于PHP json_encode 将数字索引创建为字符串而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43357966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com