PHP 序列化空关联数组



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

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

json_encode((object) $array);

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

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

另一个答案是在初始化变量时使用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

链接到自 PHP5 以来可用的 ArrayObject

您必须检查数组是否为空。

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

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

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

相关内容

  • 没有找到相关文章

最新更新