我编写了一个使用内置json_encode();
函数制作的数组。我需要它的阵列数组格式如下:
[["Afghanistan",32,12],["Albania",32,12]]
但是,它将返回:
["2":["Afghanistan",32,12],"4":["Albania",32,12]]
如何在不使用任何Regex技巧的情况下删除这些行号?
答案 0 :(得分:137)
如果PHP数组中的数组键不是连续数字,json_encode()
必须使另一个构造成为对象,因为JavaScript数组总是连续数字索引。
在PHP的外部结构上使用array_values()
来丢弃原始数组键并将其替换为从零开始的连续编号:
// Non-consecutive 3number keys are OK for PHP
// but not for a JavaScript array
$array = array(
2 => array("Afghanistan", 32, 13),
4 => array("Albania", 32, 12)
);
// array_values() removes the original keys and replaces
// with plain consecutive numbers
$out = array_values($array);
json_encode($out);
// [["Afghanistan", 32, 13], ["Albania", 32, 12]]
答案 1 :(得分:9)
json_encode()函数可以帮助您在php中将数组编码为 JSON 。
如果您在没有任何特定选项的情况下直接使用 json_encode 函数,它将返回一个数组。 喜欢上面提到的问题
$array = array(
2 => array("Afghanistan",32,13),
4 => array("Albania",32,12)
);
$out = array_values($array);
json_encode($out);
// [["Afghanistan",32,13],["Albania",32,12]]
由于您尝试将Array转换为JSON,然后我建议使用 JSON_FORCE_OBJECT 作为 json_encode 中的附加选项(参数),如下所示
<?php
$array=['apple','orange','banana','strawberry'];
echo json_encode($array, JSON_FORCE_OBJECT);
// {"0":"apple","1":"orange","2":"banana","3":"strawberry"}
?>
答案 2 :(得分:6)
我想在Michael Berkowski的回答中补充一点,如果数组的顺序颠倒了也会发生这种情况,在这种情况下,观察问题会有点棘手,因为在json中对象,订单将按升序排序。
例如:
[
3 => 'a',
2 => 'b',
1 => 'c',
0 => 'd'
]
将返回:
{
0: 'd',
1: 'c',
2: 'b',
3: 'a'
}
因此,在这种情况下,解决方案是在将其编码为json
之前使用array_reverse
答案 3 :(得分:1)
JSON的常见用法是从Web服务器读取数据,并将数据显示在Web页面中。
本章将教您如何在客户端和PHP服务器之间交换JSON数据。
PHP具有一些内置功能来处理JSON。
可以使用PHP函数json_encode()将PHP中的对象转换为JSON:
<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";
$myJSON = json_encode($myObj);
echo $myJSON;
?>
答案 4 :(得分:0)
如果未在初始数组上指定索引,则会获得常规数字索引。数组必须具有某种形式的唯一索引
答案 5 :(得分:0)
将PHP数组转换为JSON时,重音符号出现问题。我把UTF-8放在各处,但是没有什么能解决我的问题,直到我在推送数组的PHP while循环中添加了这段代码:
$es_words[] = array(utf8_encode("$word"),"$alpha","$audio");
只有'$ word'变量引起了问题。之后,它做了一个jason_encode没问题。
希望有帮助