У меня есть строка вроде этого –
[ [ -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 ] ]
Я прохожу через эту матрицу по строкам, и я хочу извлечь числа в массив для каждой строки.
Проще всего использовать регулярное выражение и 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));
Преимущество здесь в том, что не существует неопределенности или регулярного выражения, и он будет правильно вводить все отдельные элементы (как ints или 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 ) )