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