我有一个像这样的字符串 -
[ [ -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 ] ]
我逐行浏览这个矩阵,我希望将数字提取到每行的数组中。
答案 0 :(得分: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
)
您可以在the demo中看到它。
编辑:由于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));
这里的好处是不需要任何不确定性或正则表达式,它将正确地键入所有单个元素(作为整数或浮点数取决于其值)。那么,will output上面的代码:
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
)
)