使用非数字键将PHP数组编码到JSON数组

时间:2018-04-03 16:46:50

标签: php arrays json

我有这个PHP数组:

$a = array(
  "french"=>"bonjour",
  "italian"=>"buongiorno",
  "spanish"=>"buenos dias"
);

但当我echo json_encode($a);时,我得到:

{
   "french": "bonjour",
   "italian": "buongiorno",
   "spanish": "buenos dias"
}

即。一个JSON对象,但我想要一个JSON数组,代价是保留字符串键,如:

[
   "bonjour",
   "buongiorno",
   "buenos dias"
]

我该怎么做?

2 个答案:

答案 0 :(得分:4)

您可以使用array_values

echo json_encode(array_values($a));

答案 1 :(得分:1)

Php数组在严格意义上不是“数组”(字符串/对象/数字/等的集合,通过数字索引标识),但是是关联数组。也称为字典或哈希映射。它们用于键值存储。

JSON不支持字典作为类型,因此json_encode会将这些字典转换为json对象,因为支持对象。

使用json_decode,您可以通过第二个参数确定是否需要哈希映射(php数组)或对象:

$a = array(
     "french" => "bonjour",
     "italian" => "buongiorno",
     "spanish" => "buenos dias"
);

$json = json_encode($a);

$object = json_decode($json, false); // this is the default behavior
$array = json_decode($json, true);

var_dump($object); // the object
var_dump($array); // same as the starting array

对象将是:

object(stdClass)#1 (3) {
  ["french"]=>
  string(7) "bonjour"
  ["italian"]=>
  string(10) "buongiorno"
  ["spanish"]=>
  string(11) "buenos dias"
}

阵列将是:

array(3) {
  ["french"]=>
  string(7) "bonjour"
  ["italian"]=>
  string(10) "buongiorno"
  ["spanish"]=>
  string(11) "buenos dias"
}