私はこのようなものを使用します:
$string = '[0, 5, 2, 1, true, COMMENT, 1][0, 27, 4, 1, true, COMMENT 2, 2]';
preg_match_all( '#\[([^\]]+)\]#', $string, $matches);
$result = array();
foreach( $matches[1] as $match) {
$result[] = array_map( 'trim', explode( ',', $match));
}
var_dump( $result);
すべてのコンポーネントを個別に照合するのではなく、角かっこ内のすべてを照合してから、追加の解析を実行して、すべてを独自の配列要素に入れます。
出力:
array(2) {
[0]=>
array(7) {
[0]=>
string(1) "0"
[1]=>
string(1) "5"
[2]=>
string(1) "2"
[3]=>
string(1) "1"
[4]=>
string(4) "true"
[5]=>
string(7) "COMMENT"
[6]=>
string(1) "1"
}
[1]=>
array(7) {
[0]=>
string(1) "0"
[1]=>
string(2) "27"
[2]=>
string(1) "4"
[3]=>
string(1) "1"
[4]=>
string(4) "true"
[5]=>
string(9) "COMMENT 2"
[6]=>
string(1) "2"
}
}
デモ
または、次のように、使用explode
してさらに処理を行うこともできます。
$pieces = explode( ']', $string);
array_pop( $pieces); // There is one extra empty element at the end
$result = array();
foreach( $pieces as $piece) {
$parts = explode( ',', $piece);
$parts[0] = trim( $parts[0], '[');
$result[] = array_map( 'trim', $parts);
}
これにより、上記と同じ出力が得られます。