Intereting Posts
Как выполнить модульное тестирование Исключения с помощью PHPUnit? Mysqli на WAMP, попытка подключения к ошибке не выполнена отправка дополнительных значений в PHP-скрипт с использованием загрузки углового файла Как получить доступ к «ключу» и «значению» из массива, переданного в цикл for? Запись нескольких файлов в одном запросе CURL zf2 form: заполнить поле select с данными, поступающими из базы данных Когда я создаю zip-файл каталога с большим zip-файлом в PHP, я сталкиваюсь с ограничением памяти Предотвратить создание встроенного веб-сайта удаление doctype при сохранении domdocument Акцентированные символы, хранящиеся в базе данных MySQL Изменение upload_max_filesize на PHP Как preg_replace \ "с \" "при хранении в csv-файле с использованием fputcsv логических операторов или vs || (двойной канал) в php PHP-код для перенаправления, если поле mysql завершено Войдите в систему с помощью curl и перейдите на другую страницу

Извлечение чисел с плавающей запятой из строки в PHP

Я хотел бы преобразовать строку в плавающие числа. Например

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 

Спасибо.

Solutions Collecting From Web of "Извлечение чисел с плавающей запятой из строки в PHP"

 $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]); 

Вы можете использовать значения для чего-либо математического, но без их литья. литье необходимо просто при печати непосредственно.