Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将此字符串转换为数组?_Php_Regex_Arrays - Fatal编程技术网

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

Php 如何将此字符串转换为数组?,php,regex,arrays,Php,Regex,Arrays,我不习惯将特定格式的字符串转换为数组。使用explode拆分字符串似乎不是正确的方法,我对正则表达式不太在行。所以我的问题是如何将下面的字符串转换为数组 字符串的当前格式 maxWidth: 800, openEffect: elastic, closeEffect: elastic, helpers : { title : { type: outside }, thumbs : {

我不习惯将特定格式的字符串转换为数组。使用
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)
             )
)
任何帮助都将不胜感激

根据回复进行编辑:

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

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

示例中的字符串几乎是有效的JSON(JavaScript对象表示法)结构

以下是作为有效JSON的字符串的外观

 {
    "maxWidth": 800,
    "openEffect": "elastic",
    "closeEffect": "elastic",
    "helpers": {
        "title": {
            "type": "outside"
        },
        "thumbs": {
            "width": 50,
            "height": 50
        }
    }
}
因此,我们的方法(正如@WiseGuy所建议的)是首先使用
preg\u replace
注入几个字符,以将字符串init转换为有效的JSON:

$str = preg_replace('/\b/' , '"' , $str);
$str = '{'  . $str . '}';
上面的正则表达式使用
单词边界
锚点在所有单词周围添加引号。然后我们用大括号把整个东西包起来,瞧,我们有了一个与x语言兼容的对象格式

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

$objUserConfig = json_decode($str, true);
关于JSON的入门教程如下:


使用linter工具(如)验证JSON。我使用它来调试您的示例,并将其转换为适合我的示例的JSON。

您示例中的字符串几乎是一个有效的JSON(JavaScript对象表示法)结构

以下是作为有效JSON的字符串的外观

 {
    "maxWidth": 800,
    "openEffect": "elastic",
    "closeEffect": "elastic",
    "helpers": {
        "title": {
            "type": "outside"
        },
        "thumbs": {
            "width": 50,
            "height": 50
        }
    }
}
因此,我们的方法(正如@WiseGuy所建议的)是首先使用
preg\u replace
注入几个字符,以将字符串init转换为有效的JSON:

$str = preg_replace('/\b/' , '"' , $str);
$str = '{'  . $str . '}';
上面的正则表达式使用
单词边界
锚点在所有单词周围添加引号。然后我们用大括号把整个东西包起来,瞧,我们有了一个与x语言兼容的对象格式

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

$objUserConfig = json_decode($str, true);
关于JSON的入门教程如下:


使用linter工具(如)验证JSON。我使用它调试您的示例,并将其转换为适合我的示例的JSON。

您的输入字符串看起来像JSON格式。PHP使用
json\u decode()
将json字符串转换为对象

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

json_decode($jsonStr, true);

请参阅:

您的输入字符串看起来像json格式。PHP使用
json\u decode()
将json字符串转换为对象

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

json_decode($jsonStr, true);

请参阅:

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

转换文件,读入$str

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

(?i)([a-z]+)
“$1”

(?i)(?数组(

}

最后,
$newstr=“array(\n$str\n)”

但是,php解析器可以将这样的内容作为静态文件读取
数组。它是如何动态解释为变量的,我不知道。

Perl可以做到这一点。

编辑:我知道您正在显示数组的打印输出,
不是php声明数组的静态表示。这只是一个
如何将其转换为可解析内容的示例
如果php能够动态地(我不知道)这样做的话

转换文件,读入$str

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

(?i)([a-z]+)
“$1”

(?i)(?数组(

}

最后,
$newstr=“array(\n$str\n)”

但是,php解析器可以将这样的内容作为静态文件读取
数组。它是如何动态解释为变量的,我不知道。

Perl可以做到这一点。

格式从何而来?IMO,如果它不是任何类型的“公共”格式(例如YAML或JSON),则必须推出自己的解析器。如果需要这样做,regex并不总是最好的工具。方法示例:格式从何而来?IMO,如果它不是任何类型的“公共”格式(例如YAML或JSON),您必须推出自己的解析器。如果您需要这样做,regex并不总是这项工作的最佳工具。方法示例:它看起来有点像,但不是有效的JSON!提供一个建议将无效的JSON传递到需要有效JSON的函数中的答案是没有帮助的。只有不需要提问的人才会d理解您的答案。感谢您的回答。我熟悉JSON。输入将来自普通用户,因此我希望保持简单。普通用户输入有效JSON的可能性最小。@WiseGuy comment做到了这一点。它看起来有点像,但不是有效的JSON!提供的答案建议将无效的JSON传递到fu中需要有效JSON的操作没有帮助。只有不需要提问的人才能理解您的答案。谢谢您的回答。我熟悉JSON。输入将来自普通用户,因此我希望保持简单。普通用户输入有效JSON的可能性最小。@WiseGuy comment成功@WiseGuy Y Y你太棒了。非常感谢。将其添加为答案,这样我就可以将其标记为已接受。因为@Martin的解释已经沿着这条路走下去了,我只是想他可以用它来扩展他的答案。请随意在你的答案文本中复制/编辑它,作为链接消失时的永久参考。@MartinJoiner谢谢你的答案。我很高兴