おそらく、仕事をする独自のパーサーを作成する必要があります。次のような文字列があるとしましょう: 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 の作業例。