2013年9月23日月曜日

見出し記号付きテキストを連想配列にする

xmlだとかyamlだとかあるけども、日本人なら見出し記号付きテキストでしょうがと。

●見出し
本文

とか

【見出し】本文

とか、そういうの。ほとんどのテキストがそうなっているんだから、そのままパースしてやりゃぁいい。



つーことで、パースするクラスを作ってみた。スタティック変数で、見出し開始記号と、終了文字を設定出来る。デフォルトは、行頭が●で始まる記号。設定次第で、辞書カッコも使える。

以下のコードの実行結果。

array(2) {
["見出し1"]=>
string(9) "本文1"
["見出し2"]=>
string(9) "本文2"
}
array(2) {
["見出し1"]=>
string(9) "本文1"
["見出し2"]=>
string(9) "本文2"
}
<?
header("Content-Type: text/html; charset=UTF-8");

$str1 = "●見出し1\n本文1\n●見出し2\n本文2";
$mp = new midashiParser();
var_dump($mp->parse($str1));

midashiParser::$delimiterStart = "【";
midashiParser::$delimiterEnd = "】";
$str2 = "【見出し1】本文1\n【見出し2】本文2";
var_dump($mp->parse($str2));


class midashiParser{
    public static $delimiterStart = "●"; 
    public static $delimiterEnd   = "\n";
    
    function parse($strIn){
        $aryLine = explode("\n".self::$delimiterStart,"\n".$strIn);
        $aryOut = array();
        foreach($aryLine as $line){
            list($key,$value) = explode(self::$delimiterEnd,$line,2);
            $key = trim($key);
            $value = trim($value);
            if($key!=""){
                $aryOut[$key] = $value;
            }
        }
        return  $aryOut;
    }
}

0 件のコメント:

コメントを投稿