0

私はこのような文字列を持っています-

[ [ -2, 0.5 ],

数字を取得して配列に入れたいのですが、最終的には次のようになります。

array(
  [0] => -2,
  [1] => 0.5
)

これを行うための最良の方法は何ですか?

編集:

より徹底的な例

[ [ -2, 0.5, 4, 8.6 ],
  [ 5,  0.5, 1, -6.2 ],
  [ -2, 3.5, 4, 8.6 ],
  [ -2, 0.5, -3, 8.6 ] ]

私はこの行列を1行ずつ調べていて、各行の配列に数値を抽出したいと思います。

4

1 に答える 1

5

使用するのが最も簡単なのは正規表現とpreg_match_all()

preg_match_all( '/(-?\d+(?:\.\d+)?)/', $string, $matches);

結果$matches[1]には、検索している正確な配列が含まれます。

array(2) {
  [0]=>
  string(2) "-2"
  [1]=>
  string(3) "0.5"
}

正規表現は次のとおりです。

(         - Match the following in capturing group 1
 -?       - An optional dash
 \d+      - One or more digits
 (?:      - Group the following (non-capturing group)
   \.\d+  - A decimal point and one or more digits
 )
 ?        - Make the decimal part optional
)

あなたはそれがデモで働いているのを見ることができます。

編集: OPが質問を更新したので、行列の表現は次のように簡単に解析できますjson_decode()

$str = '[ [ -2, 0.5, 4, 8.6 ],
  [ 5,  0.5, 1, -6.2 ],
  [ -2, 3.5, 4, 8.6 ],
  [ -2, 0.5, -3, 8.6 ] ]';
var_dump( json_decode( $str, true));

ここでの利点は、不確実性や正規表現が不要であり、個々の要素すべてを適切に入力できることです(値に応じてintまたはfloatとして)。したがって、上記のコードは次のように出力します。

Array
(
    [0] => Array
        (
            [0] => -2
            [1] => 0.5
            [2] => 4
            [3] => 8.6
        )

    [1] => Array
        (
            [0] => 5
            [1] => 0.5
            [2] => 1
            [3] => -6.2
        )

    [2] => Array
        (
            [0] => -2
            [1] => 3.5
            [2] => 4
            [3] => 8.6
        )

    [3] => Array
        (
            [0] => -2
            [1] => 0.5
            [2] => -3
            [3] => 8.6
        )

)
于 2012-08-01T14:59:49.453 に答える