【问题标题】:php how to represent a multilevel array in a string formphp如何以字符串形式表示多级数组
【发布时间】:2012-04-24 01:15:56
【问题描述】:

这是一个php中混合的、多级的、不规则数组的例子:

$settings['style_formats'] = array(
  array('title' => 'Center table', 'selector' => 'table', 'styles' => array('margin-left' => 'auto', 'margin-right' => 'auto')),
  array('title' => 'Menu style', 'selector' => 'ul,ol', 'classes' => 'menu'),
  array('title' => 'Layer2', 'inline' => 'div', 'styles' => array('background-color' => 'orange')),
  array('title' => 'Bold text', 'inline' => 'b'),
  array('title' => 'Red text', 'inline' => 'span', 'styles' => array('color' => '#ff0000')),
  array('title' => 'Red header', 'block' => 'h1', 'styles' => array('color' => '#ff0000')),
  array('title' => 'Example 1', 'inline' => 'span', 'classes' => 'example1'),
  array('title' => 'Example 2', 'inline' => 'span', 'classes' => 'example2'),
  array('title' => 'Table styles'),
  array('title' => 'Table row 1', 'selector' => 'tr', 'classes' => 'tablerow1'),
);

我需要找到一种方法来表示并将这种数组从字符串格式转换为php数组。初始字符串格式必须是人类使用文本编辑器可读和可写的。所以例如它不应该是使用“serialize”的结果,因为“serialize”是一个 php 函数(而且不可能由人创建),并且字符串必须可以在文本编辑器中手动创建。

字符串将作为参数传递给一个函数,该函数将把它转换成一个像上面那样的 php 数组。

如果它是一个简单的数组,我会使用逗号分隔的字符串和“explode”。但它是多级的,因此使用“explode”将不起作用,因为它会拆分内部数组。 preg_split 看起来也不乐观,因为数组非常不规则。

有什么办法吗?

【问题讨论】:

  • JSON 是你这个项目的朋友。
  • @BrendonCheves:我不同意,如果您考虑(缺少)空格、Unicode、转义序列、大括号...

标签: php arrays deserialization


【解决方案1】:

如果这是由人类编写的,YAML 可能是你最好的选择。

有几个PHP implementations 可用。

【讨论】:

    【解决方案2】:

    JSON 是众多解决方案之一,如下所示:(请原谅我没有格式化)

    {"style_formats":[{"title":"Center table","selector":"table","styles":{"margin-left":"auto","margin-right":"auto"}},{"title":"Menu style","selector":"ul,ol","classes":"menu"},{"title":"Layer2","inline":"div","styles":{"background-color":"orange"}},{"title":"Bold text","inline":"b"},{"title":"Red text","inline":"span","styles":{"color":"#ff0000"}},{"title":"Red header","block":"h1","styles":{"color":"#ff0000"}},{"title":"Example 1","inline":"span","classes":"example1"},{"title":"Example 2","inline":"span","classes":"example2"},{"title":"Table styles"},{"title":"Table row 1","selector":"tr","classes":"tablerow1"}]}
    

    【讨论】:

    • JSON 在我的情况下效果最好。该表示法与原生 php 关联数组表示法非常相似(对我来说这是一个加号)。此外,与 simplexml 相反,它只需要 1 行代码,而将 xml 导入嵌套的 assoc 数组需要一些自定义代码,例如 this。 JSON 也忽略空格(有利于人工输入)哦,我对 Unicode 也没有任何问题。
    【解决方案3】:

    尝试将其翻译成 xml 文档怎么样,这将是人类和机器可读的吗?

    有很多 php 库可以这样做,并将 xml 文件读入 php 数组...

    对于入门

    http://www.phpbuilder.com/columns/adam_delves20060206.php3

    http://www.php.net/manual/en/book.simplexml.php

    【讨论】:

      猜你喜欢
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      • 2015-09-08
      相关资源
      最近更新 更多