1

我有这个文件,我不知道如何解析这个文件。

type = 10
version = 1.2
PART
{
    part = foobie
    partName = foobie
    EVENTS
    {
        MakeReference
        {
            active = True
        }
    }
    ACTIONS
    {
    }
}
PART
{
    part = bazer
    partName = bazer
}

我希望这是一个看起来像的数组

$array = array(
    'type' => 10,
    'version' => 1.2,
    'PART' => array(
        'part' => 'foobie',
        'partName' => 'foobie,
        'EVENTS' => array(
            'MakeReference' => array(
                'active' => 'True'
            )
        ),
        'ACTIONS' => array(
        )
    ),
    'PART' => array(
        'part' => 'bazer',
        'partName' => 'bazer'
    )
);

我尝试使用 preg_match 但这并不成功。有任何想法吗?

4

2 回答 2

1

为什么不使用 PHP 可以原生解码的格式,比如 JSON?

http://php.net/json_decode

$json = file_get_contents("filename.txt");
$array = json_decode($json);
print_r($array);
于 2013-01-20T16:46:16.043 回答
0

这是我的方法。

首先更改我将 { 更改为之前的行。这很容易

$lines = explode("\r\n", $this->file);
foreach ($lines as $num => $line) {
    if (preg_match('/\{/', $line) === 1) {
       $lines[$num - 1] .= ' {';
       unset($lines[$num]);
    }
}

现在输入看起来像这样

PART {
    part = foobie

现在我们可以将整个事情改为 XML,我知道我在问题中说的是 PHP 数组,但是 XML 对象仍然足够好。

foreach ($lines as $line) {
            if (preg_match('/(.*?)\{$/', $line, $matches)) {
                $xml->addElement(trim($matches[1]));
                continue;
            }

            if (preg_match('/\}/', $line)) {
                $xml->endElement();
                continue;
            }

            if (strpos($line, ' = ') !== false) {
                list($key, $value) = explode(' = ', $line);
                $xml->addElementAndContent(trim($key), trim($value));
            }
}

addElement 实际上只是将 a 添加到字符串 endElement 添加 a 和 addElementAndContent 两者都做,并在它们之间添加内容。

并且只是为了使整个内容成为一个 XML 对象,我正在使用

$xml = simplexml_load_string($xml->getXMLasText());

现在 $xml 是一个 XML 对象,使用起来更容易:)

于 2013-01-20T18:00:53.517 回答