我想将字符串转换为浮点数。例如
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
谢谢。
答案 0 :(得分:18)
$str = '152.15 x 12.34 x 11mm';
preg_match_all('!\d+(?:\.\d+)?!', $str, $matches);
$floats = array_map('floatval', $matches[0]);
print_r($floats);
(?:...)
正则表达式构造就是所谓的non-capturing group。这意味着在$mathces
数组的一部分中不会单独返回块。这不是严格必要的在这种情况下,但是知道这是一个有用的结构。
注意:对元素调用floatval()
并不是必需的,因为如果您尝试在算术运算或类似操作中使用它们,PHP通常会正确处理类型。尽管如此,它并没有受到伤害,特别是因为只是一个班轮。
答案 1 :(得分:4)
<?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
)
答案 2 :(得分:2)
$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 )
答案 3 :(得分:1)
$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 )
测试它并且它适用于上面的所有字符串。
答案 4 :(得分:0)
preg_match_all("/\d*\.?\d+|\d+/", "152.15mmx12.34mm x .11mm", $matches);
此示例也支持 .11 等数字,因为它们是有效数字。 $matches[0]
将包含 152.15 , 12.34 和 0.11 ,因为您输入的结果为float。如果您不 0.11 将显示为 .11 。我会使用array_map
输入演员。
$values = array_map("floatval", $matches[0]);
您可以使用任何数学的值,而不使用类型转换它们。直接打印时只需要进行铸造。