我很难将特定格式的字符串转换为数组。使用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的可能性极小。
答案 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);
答案 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可以做到这一点。