PHP数组到JSON数组使用json_encode();

Rya*_*die 66 php arrays json

我编写了一个使用内置json_encode();函数制作的数组.我需要它的阵列数组格式,如下所示:

[["Afghanistan",32,12],["Albania",32,12]]
Run Code Online (Sandbox Code Playgroud)

但是,它将返回:

["2":["Afghanistan",32,12],"4":["Albania",32,12]]
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ski 150

如果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]]
Run Code Online (Sandbox Code Playgroud)

  • 当我发现 json_encode 无明显原因将数组转换为对象时,当数组在被 array_filter 过滤后只有一项时,我就到此为止了。我不知道数组索引是否与这个令人讨厌的php“错误”有关,但是array_values 为我整理了它。从现在开始.. 没有调用 array_values 的数组的 json_encode 。 (2认同)
  • @MarBar如果数组有一个非数字字符串键或一个数字键_不按顺序_,`json_encode()`将生成一个`{}`对象而不是数组`[]`,因为JavaScript/JSON没有其他方法代表这样的结构。但是,如果生成的 json 字符串中不需要这些键,您可以使用 array_keys() 删除键。 (2认同)

小智 12

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]]
Run Code Online (Sandbox Code Playgroud)

既然你试图将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"} 
?>
Run Code Online (Sandbox Code Playgroud)


Inc*_*c33 6

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

例如:

[
    3 => 'a',
    2 => 'b',
    1 => 'c',
    0 => 'd'
]
Run Code Online (Sandbox Code Playgroud)

将返回:

{
    0: 'd',
    1: 'c',
    2: 'b',
    3: 'a'
}
Run Code Online (Sandbox Code Playgroud)

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