如何将此字符串转换为数组?

时间:2013-10-04 16:15:02

标签: php regex arrays

我很难将特定格式的字符串转换为数组。使用explode分割字符串似乎不是正确的方法,我对正则表达式不太好。所以我的问题是如何将以下字符串转换为数组?

字符串的当前格式

maxWidth: 800,
openEffect: elastic,    
closeEffect: elastic,
helpers : {
       title : {
             type: outside
           },
       thumbs : {
              width  : 50,
              height : 50
            }
      }

所需数组

array(
  'maxWidth' => 800,
  'openEffect' => 'elastic',
  'closeEffect' => 'elastic',
  'helpers' => array(
               'title' => array('type' => 'outside'),
               'thumbs' => array('width' => 50, 'height' => 50)
             )
)

非常感谢任何帮助。

根据回复进行编辑:

字符串看起来像JSON,但它不是JSON。它只是用户以该格式输入的字符串。输入将来自普通用户,所以我想保持简单。普通用户输入有效JSON的可能性极小。

3 个答案:

答案 0 :(得分:2)

示例中的字符串几乎是一个有效的JSON(JavaScript Object Notation)结构!

以下是您的字符串看起来像有效的JSON

 {
    "maxWidth": 800,
    "openEffect": "elastic",
    "closeEffect": "elastic",
    "helpers": {
        "title": {
            "type": "outside"
        },
        "thumbs": {
            "width": 50,
            "height": 50
        }
    }
}

所以我们的方法(由@WiseGuy建议)首先将preg_replace的几个字符注入将您的字符串init转换为有效的JSON:

$str = preg_replace('/\b/' , '"' , $str);
$str = '{'  . $str . '}';

上面的正则表达式使用Word Boundaries锚点在所有单词周围添加引号。然后我们用花括号包裹整个东西,瞧,我们有一个x语言兼容的对象格式。

我们现在可以使用标准函数来生成我们的对象:

$objUserConfig = json_decode($str, true);

这里有一个关于JSON的好初学者教程:http://code.drewwilson.com/entry/an-introduction-to-json

使用http://jsonlint.com/等linter工具验证JSON。我用它来调试你的例子并将它转换成适合我的例子的JSON。

答案 1 :(得分:1)

您的输入字符串看起来像json格式。 PHP有json_decode()将json字符串转换为对象。

要转换为数组,请使用以下代码:

json_decode($jsonStr, true);

参考:http://php.net/manual/en/function.json-decode.php

答案 2 :(得分:1)

编辑:我知道你正在显示数组的打印输出和
不是php声明的数组的静态表示。这只是一个 如何将其转换为可以解析的内容的示例 进入那个数组。如果php具有动态这样做的能力(我不知道)。

转换文件,读入$ str

按此顺序,在$ str上执行正则表达式 每个都是全球旗帜。

(?i)([a-z]+)'$1'
(?i)(?<=[a-z]')\s*:(?=\s*[^{\s])=>
(?i)(?<=[a-z]')\s*:\s*{=> array(
})

最后,$newstr = "array(\n$str\n)"
但是,这样的东西可以被php解析器读作静态
阵列。它如何被动态地解释为我不知道的变量。
Perl可以做到这一点。