我一直致力于将特定格式的字符串转换为数组。使用
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 的可能性极小。
示例中的字符串几乎是有效的 JSON(JavaScript 对象表示法)结构!
这是您的字符串作为有效 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
使用 linter 工具(例如 http://jsonlint.com/)来验证 JSON。我用它来调试您的示例并将其转换为适合我的示例的 JSON。
您的输入字符串看起来像 json 格式。 PHP 有
json_decode()
将 json 字符串转换为对象。
要转换为数组,请使用以下代码:
json_decode($jsonStr, true);
编辑:我知道您正在显示数组的打印输出并且
不是 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)"