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

JSON のように、PHP がネイティブにデコードできる形式を使用しないのはなぜですか?

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 に答える