php序列化空关联数组

时间:2014-01-01 20:27:45

标签: php arrays json associative-array empty-list

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

4 个答案:

答案 0 :(得分:3)

在编码之前将其投射到对象:

json_encode((object) $array);

答案 1 :(得分:3)

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

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

echo json_encode($array, JSON_FORCE_OBJECT);  // {"foo":{},"bar":{}}

答案 2 :(得分:0)

您必须检查阵列是否为空。

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

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

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

答案 3 :(得分:0)

对此的另一个答案是在初始化变量时使用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"}'

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

链接到ArrayObject,自PHP5起可用