3

我想将关联数组转储到 php 文件中。有时结果可能是空的,在这种情况下,我希望文件的内容完全是 : { } 以便我可以以相同的方式处理所有文件。但是我只能在 php 中初始化一个简单的数组,所以文件中的输出总是这样:[]。我已经尝试向关联数组添加一个虚拟条目,然后再次删除该条目以使数组为空,但随后 [ ] 再次成为文件中的输出。

4

4 回答 4

3

在编码之前将其转换为对象:

json_encode((object) $array);
于 2014-01-01T20:30:14.113 回答
3

json_encode函数有一个选项可以将数组强制转换为适合上下文的对象 -关联数组,但这也包括空数组,例如:

$array = array(
    'foo' => array(),
    'bar' => array()
);

echo json_encode($array, JSON_FORCE_OBJECT);  // {"foo":{},"bar":{}}
于 2014-01-01T20:45:19.083 回答
2

另一个答案是在初始化变量时使用ArrayObject而不是。[]

下面说明问题。当关联数组为空时,它被 JSON 编码为'[]'

$object = [];
echo json_encode($object); // you get '[]'

$object['hello'] = 'world';
echo json_encode($object); // you get '{hello: "world"}'

相反,保持一切不变,但是当你声明 时$object,使用ArrayObject

$object = new ArrayObject;
echo json_encode($object); // you get '{}'

$object['hello'] = 'world';
echo json_encode($object); // you get '{hello: "world"}'

这是一个很好的选择的原因是因为 using(object) []将变量转换为 stdClass 意味着您必须使用$variable->property. 但是,如果您现有的所有代码都是使用 编写的$variable['property'],那么 using(object) []意味着您将不得不更改所有代码,而您可以只使用new ArrayObject.

指向自 PHP5 以来可用的ArrayObject的链接

于 2020-11-24T14:52:13.930 回答
1

您将不得不检查数组是否为空。

if (empty($array_to_dump)) {
    print ':{}';
} else {
    print serialize($array_to_dump);
}

但是,反序列化时返回的数组应该完全相同......一个空数组。

编辑:或使用上述,甚至更好。

于 2014-01-01T20:33:46.717 回答