2014-09-28 184 views
-1

我有一个程序存档,我需要这个存档的信息加载到php中作为数组。PHP将字符串转换为数组

我可以在一个字符串中设置档案的信息,但我不能将其转换为数组。

这是字符串:

archivedVars = 
{ 
    ["Default"] = 
    { 
     ["Name"] = 
     { 
      ["Name1"] = 
      { 
       ["@XXXXX"] = 
       { 
        ["show"] = true, 
        ["open"] = true, 
       }, 
      }, 
      ["Name2"] = 
      { 
       ["YYYYY"] = 
       { 
        ["show"] = true, 
        ["open"] = true, 
       }, 
      }, 
     }, 
    }, 
} 

我怎么能这个字符串转换成PHP数组?

+1

为什么是JSON无效? – 2014-09-28 23:31:06

回答

3

最好的事情是发现使用的格式和解码库的存在。

如果失败了,你应该开发一个合适的解析器,状态机或其他东西。

如果结构与发布时一样,并且结构的正确性得到保证,您可以尝试将其转换为可用库可解析的内容,例如, JSON:

$str = preg_replace('#[[]("[^"]+")[]]\\s*=#', '\\1:', $str); 
$str = preg_replace('#,(\\s*})#', '\\1', $str); 
$str = preg_replace('#archivedVars =#', '', $str); 
$arr = json_decode($str, true); 

以上(即使你永远不应该解析HTML - 或结构化数据 - 用正则表达式),将产生一个适合步行的数组:

Array 
(
    [Default] => Array 
     (
      [Name] => Array 
       (
        [Name1] => Array 
         (
          [@XXXXX] => Array 
           (
            [show] => 1 
            [open] => 1 
           ) 

         ) 

        [Name2] => Array 
         (
          [YYYYY] => Array 
           (
            [show] => 1 
            [open] => 1 
           ) 
         ) 
       ) 
     ) 
) 
+0

好工作!我试图弄清楚,但对我来说太快了! – 2014-09-28 23:50:21

+0

THX的信息^^。 – user3358149 2014-09-29 00:05:49