0

次の文字列を配列に変換したい

[map]id=map,size=512x512,markers=[[緯度=40.5,経度=-73.9],[緯度=41.5,経度=-72.9]][/map]

コンマを区切り文字として使用したいのですが、[ と ] 文字の間に収まらない場合に限ります。

したがって、上記の文字列は次のように変換されます。

  • [0] => id=マップ、
  • [1] => サイズ=512x512、
  • [2] => マーカー=[[緯度=40.5、経度=-73.9]、[緯度=41.5、経度=-72.9]]

これを達成する最も簡単な方法は何ですか?

関数 str_getcsv の使用を検討しましたが、これはセクション全体が渡されたエンクロージャ内にある場合にのみ機能するようです。

アドバイスをいただければ幸いです。

ありがとう。

4

1 に答える 1

3

おそらく、仕事をする独自のパーサーを作成する必要があります。次のような文字列があるとしましょう: id=map,size=512x512,markers=[[latitude=40.5,longitude=-73.9],[latitude=41.5,longitude=-72.9]]([map]短い例のために省略されています):

$lastStart = 0; // Position where we last cut
$len = strlen( $str);
$openedBraces = 0; // Number of braces opened
$result = array();

for( $i = 0; $i < $len; $i++){
    switch( $str[$i]){
        // Handle opening brace
        case '[':
           $openedBraces++;
           break;

        // Handle closing brace
        case ']':
           $openedBraces--; // You may want to check negative numbers
           break;

        // Handle coma (it's sane operation only if there are no braces opened)
        case ',':
           if( $openedBraces == 0){
               $result[] = substr( $str, $lastStart, $i-$lastStart);
               $lastStart = $i+1;
           }
           break;
    }
}

$result[] = substr( $str, $lastStart);

codepad.org の作業例。

于 2012-11-22T14:58:15.730 に答える