95

我已经使用内置json_encode();函数对我制作的数组进行了编码。我需要它的数组格式,如下所示:

[["Afghanistan",32,12],["Albania",32,12]]

但是,它返回为:

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

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

4

4 回答 4

198

如果您的 PHP 数组中的数组键不是连续的数字,则json_encode() 必须使另一个构造一个对象,因为 JavaScript 数组总是以连续的数字索引。

array_values()在 PHP 的外部结构上使用以丢弃原始数组键并用从零开始的连续编号替换它们:

例子:

// 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]]
于 2012-07-30T12:59:36.403 回答
21

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_encode中使用JSON_FORCE_OBJECT作为附加选项(参数),如下所示

<?php
$array=['apple','orange','banana','strawberry'];
echo json_encode($array, JSON_FORCE_OBJECT);
// {"0":"apple","1":"orange","2":"banana","3":"strawberry"} 
?>
于 2018-04-23T19:26:51.547 回答
4

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

例如:

[
    3 => 'a',
    2 => 'b',
    1 => 'c',
    0 => 'd'
]

将返回:

{
    0: 'd',
    1: 'c',
    2: 'b',
    3: 'a'
}

所以在这种情况下的解决方案是array_reverse在将其编码为json之前使用

于 2016-11-01T15:52:53.393 回答
2

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

$es_words[] = array(utf8_encode("$word"),"$alpha","$audio");

只有“$word”变量有问题。之后它做了一个 jason_encode 没问题。

希望有帮助

于 2020-06-26T22:51:53.987 回答