PHP - 将字符串转换为键值数组

时间:2015-05-07 14:47:46

标签: php regex

我将chars从文本文件转换为键值数组时遇到问题。 它忽略了空格。

我的文字是这样的:

{
id: "89",
name: "Labour",
description: "<p>{module Labour Featured Stories}</p>",
image: "/media/k2/categories/",
language: "*",
parent: "87"
}

{
id: "90",
name: "International",
description: "<p>{module International Featured Stories}</p>",
image: "/media/k2/categories/",
language: "*",
parent: "87"
}

问题出现在我的preg_match代码中的分隔符附近,我丢失了key1或key'2值中的秒数字!

type="lorem" template="lorem_ipsum.phtml" key1="lorem Ipsum" key2="lorem Ipsum" key2="lorem Ipsum"

帮助!

2 个答案:

答案 0 :(得分:5)

此正则表达式应该更好地匹配您的预期文本:

(\w+)="([^"]*)"

一个单词后跟一个等号,然后是双引号,然后是下一个双引号的任何内容。

preg_match_all('/(\w+)="([^"]*)"/', $line_Content, $r);
$myarray = array_combine($r[1], $r[2]);

请注意,对于双引号内的双引号,这将失败,此时您需要转义序列,此时正则表达式变得非常麻烦。

答案 1 :(得分:3)

它看起来像XML / HTML节点的属性。为什么不让DOMParser做我们的工作?

$string = 'type="lorem" template="lorem_ipsum.phtml" key1="lorem Ipsum" key2="lorem Ipsum"';
$xml = '<foo ' . $string . ' />';

$doc = new DOMDocument();
@$doc->loadXML($xml);

$element = $doc->getElementsByTagName('foo')->item(0);
foreach($element->attributes as $attr) {
    $result [$attr->name] = $attr->value;
}

var_dump($result);

如果您明确要验证字符串格式良好,这非常有用。但是,如果您的输入不是XML / HTML,则无效。