【问题标题】:php serialize empty associative arrayphp序列化空关联数组
【发布时间】:2014-01-19 07:24:29
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    json_encode((object) $array);
    

    【讨论】:

      【解决方案2】:

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

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

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

      编辑:或者使用上面的,甚至更好。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-26
            • 2011-01-28
            • 1970-01-01
            • 2013-06-16
            相关资源
            最近更新 更多