使用JSON_encode()将PHP数组转换为JSON数组;

使用JSON_encode()将PHP数组转换为JSON数组;,php,arrays,json,Php,Arrays,Json,我使用内置的json_encode()对一个数组进行了编码函数。我需要一个数组的格式,如下所示: [["Afghanistan",32,12],["Albania",32,12]] 然而,它的回归是: {"2":["Afghanistan",32,12],"4":["Albania",32,12]} 如何在不使用任何正则表达式技巧的情况下删除这些行号?如果PHP数组中的数组

我使用内置的
json_encode()对一个数组进行了编码函数。我需要一个数组的格式,如下所示:

[["Afghanistan",32,12],["Albania",32,12]]
然而,它的回归是:

{"2":["Afghanistan",32,12],"4":["Albania",32,12]}

如何在不使用任何正则表达式技巧的情况下删除这些行号?

如果PHP数组中的数组键不是连续的数字,
json\u encode()
必须使另一个构造成为对象,因为JavaScript数组总是连续地进行数字索引

使用PHP中的外部结构丢弃原始数组键,并将其替换为基于零的连续编号:

例子:
我想补充一下Michael Berkowski的答案,如果数组的顺序颠倒,也会发生这种情况,在这种情况下,观察这个问题就有点棘手了,因为在json对象中,顺序将按升序排列

例如:

[
    3 => 'a',
    2 => 'b',
    1 => 'c',
    0 => 'd'
]
将返回:

{
    0: 'd',
    1: 'c',
    2: 'b',
    3: 'a'
}
因此,本例中的解决方案是在将其编码为json之前使用
array\u reverse
json\u encode()函数将帮助您在php中将array编码为json

如果不使用任何特定选项直接使用justjson_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]]
由于您正在尝试将数组转换为JSON,因此我建议使用JSON\u FORCE\u OBJECT作为JSON\u encode中的附加选项(参数),如下所示

<?php
$array=['apple','orange','banana','strawberry'];
echo json_encode($array, JSON_FORCE_OBJECT);
// {"0":"apple","1":"orange","2":"banana","3":"strawberry"} 
?>

JSON的一个常见用法是从web服务器读取数据,并在网页中显示数据

本章将教您如何在客户端和PHP服务器之间交换JSON数据

PHP有一些内置函数来处理JSON

可以使用PHP函数JSON_encode()将PHP中的对象转换为JSON:


我在将PHP数组转换为JSON时遇到了重音字符问题。我把UTF-8的东西放得到处都是,但没有解决我的问题,直到我在推数组的PHP while循环中添加了这段代码:

$es_words[]=数组(utf8_编码(“$word”)、“$alpha”、“$audio”);
只有“$word”变量出现了问题。之后它做了一个jason_编码没有问题


希望对你有所帮助

[“2”:[“阿富汗”,32,12],“4”:[“阿尔巴尼亚”,32,12]]
甚至不是有效的JSON,所以我怀疑你是否明白。如果顶级数组是关联的,只需调用
array\u values()
即可获得连续的索引元素。本主题也很有意思:当我发现json\u encode在数组中只有一个项,并且经过array\u filter筛选后,该数组中只有一个项时,我就在这里结束了。我不知道数组索引是否与这个讨厌的php“bug”有关,但是数组的值帮我解决了这个问题。从现在起。。如果数组的json编码没有被调用的数组值。@MarBar如果数组有一个非数字字符串键或一个顺序错误的数字键,
json\u encode()
将生成一个
{}
对象,而不是一个数组
[]
,因为JavaScript/json没有其他方法来表示这样的结构。但是是的,如果生成的json字符串中不需要这些键,您可以使用
array\u keys()
剥离它们。@MichaelBerkowski:我从db表中得到的复合主键也有同样的问题,我首先需要做的是:
mysqli\u fetch\u assoc
然后
array\u value
。。。我想知道这是否是获得具有大量数据的真实阵列的最有效的方法。。。我应该重写我的自定义
json\u编码吗?“你(欣赏)对此有何看法?”deblocker很难猜到hour复合钥匙是否合适。通常PHP的
array_*()
函数都非常有效。在小数组上,如果可以避免循环,我通常更喜欢使用几个单动作数组函数。但是如果您的mysqli_结果很大,您可能不希望一次将其全部编译成一个数组,然后调用
array_values()
。取而代之的是,在获取时最好将行附加到数组中。所有猜测都是因为我不知道您的代码是什么样子的。@这在很大程度上取决于您需要创建的XML的结构,因为XML元素必须以某种方式命名。我认为@Michael Berkowski编写的
array\u values
解决方案更具普遍性,在您的案例中也适用。@mickmackusa我不同意删除它。虽然它可能对OP没有用处,但对其他有类似问题的人仍然有用。这是很久以前的事了。我记得我只是想回答另一个可能不明显的案例,如果有人有类似的问题,并将滚动浏览,这将给他们一个提示。我不认为这有什么坏处。诚然,一个人可能会盲目地遵循@Michael Berkowski的解决方案,但如果你已经认为这不是你的问题,或者试图理解为什么这是你的问题,那么这可能就是问题……每个答案都必须在问题的范围内解决问题。通过改变样本数据来扩展问题是不好的——否则我们会看到页面负载受到范围蠕变的影响。这里有数百万页,请找一个更合适的页面发布此建议
array\u reverse()
对OP的问题绝对没有好处。帖子的年龄不是这个决定的因素。研究人员不在乎一个页面/帖子有多旧。他们希望得到针对给定问题的最佳建议,而不要浪费时间阅读离题/无关的内容。
<?php
$array=['apple','orange','banana','strawberry'];
echo json_encode($array, JSON_FORCE_OBJECT);
// {"0":"apple","1":"orange","2":"banana","3":"strawberry"} 
?>