Я хотел бы преобразовать строку в плавающие числа. Например
152.15 x 12.34 x 11mm
в
152.15, 12.34 and 11
и хранить в таком массиве, что $ dim [0] = 152.15, $ dim [1] = 12.34, $ dim [2] = 11.
Мне также нужно будет обрабатывать такие вещи, как
152.15x12.34x11 mm 152.15mmx12.34mm x 11mm
Спасибо.
$str = '152.15 x 12.34 x 11mm'; preg_match_all('!\d+(?:\.\d+)?!', $str, $matches); $floats = array_map('floatval', $matches[0]); print_r($floats);
(?:...)
регулярного выражения (?:...)
– это то, что называется группой, не захватывающей . Это означает, что кусок не возвращается отдельно в части массива $mathces
. В этом случае это не обязательно, но полезно знать.
Примечание: вызов floatval()
для элементов не является строго необходимым, поскольку PHP, как правило, правильно манипулирует типами, если вы попытаетесь использовать их в арифметической операции или аналогичной. Это не повредит, хотя, в частности, только для одного лайнера.
<?php $s = "152.15 x 12.34 x 11mm"; if (preg_match_all('/\d+(\.\d+)?/', $s, $matches)) { $dim = $matches[0]; } print_r($dim); ?>
дает
Array ( [0] => 152.15 [1] => 12.34 [2] => 11 )
$string = '152.15 x 12.34 x 11mm'; preg_match_all('/(\d+(\.\d+)?)/', $string, $matches); print_r($matches[0]); // Array ( [0] => 152.15 [1] => 12.34 [2] => 11 )
$str = "152.15 x 12.34 x 11mm"; $str = str_replace("mm", "", $str); $str = explode("x", $str); print_r($str); // Array ( [0] => 152.15 [1] => 12.34 [2] => 11 )
Протестировал его, и он работает на всех строках выше.
preg_match_all("/\d*\.?\d+|\d+/", "152.15mmx12.34mm x .11mm", $matches);
В этом примере также поддерживаются такие числа, как .11 , так как они являются допустимыми числами. $matches[0]
matches $matches[0]
будет содержать 152.15 , 12.34 и 0.11 , учитывая, что вы вводите результат для float. Если вы не сделаете 0.11 , появится как .11 . Я бы array_map
cast, используя array_map
.
$values = array_map("floatval", $matches[0]);
Вы можете использовать значения для чего-либо математического, но без их литья. литье необходимо просто при печати непосредственно.