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

Вот способ сделать это в bash, если у вашего вида нет сортировки версий:

cat <your_former_ls_output_file> | awk ' BEGIN { FS="_" } { printf( "%03d\n",$2) }' | sort | awk ' { printf( "data_%d_box\n", $1)  }'

Все в одной строке. Имейте в виду, я не проверял это на ваших конкретных данных, поэтому может потребоваться небольшая настройка для правильной работы для вас. Это обрисовывает в общих чертах хорошее, надежное и относительно простое решение, все же. Конечно, вы всегда можете поменять имя файла cat + в начале на фактическое значение ls, чтобы создать данные файла на лету. Для захвата фактического столбца имени файла вы можете выбрать между правильными параметрами ls или передачей через cut или awk.

8
задан Tian Bo 3 June 2009 в 12:16
поделиться

5 ответов

$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 обычно правильно манипулирует типами, если вы попытаетесь использовать их в арифметических операциях или аналогичных. Хотя это не больно, особенно из-за того, что он всего лишь один лайнер.

18
ответ дан 5 December 2019 в 06:38
поделиться
$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 ) 
2
ответ дан 5 December 2019 в 06:38
поделиться
<?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
)
4
ответ дан 5 December 2019 в 06:38
поделиться
$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 ) 

Протестировано, работает со всеми приведенными выше строками.

1
ответ дан 5 December 2019 в 06:38
поделиться
preg_match_all("/\d*\.?\d+|\d+/", "152.15mmx12.34mm x .11mm", $matches);

В этом примере также поддерживаются такие числа, как .11 , поскольку они являются действительными числами. $ match [0] будет содержать 152,15 , 12,34 и 0,11 , если вы введете приведение результата к float. Если вы этого не сделаете, 0.11 будет отображаться как .11 . Я бы набрал приведение, используя array_map .

$values = array_map("floatval", $matches[0]); 

Однако вы можете использовать значения для любых математических операций без преобразования типов. литье просто необходимо при прямой печати. ​​

0
ответ дан 5 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: