单独的字符串与爆炸php

时间:2017-08-16 04:06:58

标签: php explode

我在PHP中使用public boolean isVisible(int elementID) { try { onView(withId(elementID)).check(matches(isDisplayed())); return true; } catch (Throwable t) { return false; } } ,因为我需要分隔一个字符串。这种类型:

if(isVisible(R.id.dialogID)) {
    onView(withText("OK")).perform(click()); // dismiss the dialog by clicking 'OK' button
    // do whatever you want to do after this
}

我需要将数字分开,因为我对它们进行了数学运算。我的代码在整数时运行良好。如果我有一个这种类型的字符串explode,它不会考虑小数部分$Data = '10 x 4'; 。我怎么能让我考虑到这一部分呢?

10 x 2.5

4 个答案:

答案 0 :(得分:2)

您可以采取以下两种方法。如果您可以将逗号分隔符更改为句点/句号:

$data  = '10 x 2.5';
$floats = array_map('floatval', explode(' x ', $data));
echo $floats[0] * $floats[1];

演示:https://3v4l.org/hFMEt

或者您可以使用正则表达式,它也会确认您拥有正确的数据格式。

echo preg_replace_callback('/(\d+(?:[.,]\d+)?)\h*x\h*(\d+(?:[.,]\d+)?)/', function($match) {
    return str_replace(',' , '.', $match[1]) * str_replace(',' , '.', $match[2]);
    }, $data);

PHP演示:https://3v4l.org/I82Gt
正则表达式演示:https://regex101.com/r/tTcJSp/1/

答案 1 :(得分:1)

试试这个。只需将“,”替换为“。”它正在发挥作用。

$data  = '10 x 2,5';
$data  = str_replace(',','.','10 x 2,5');
$array = explode("x", $data);
echo $total = $array[0]*$array[1];

答案 2 :(得分:0)

试试这个:

<?php
 $data  = '10 x 2,5';
 $array = explode("x", $data);
 $total = floatval(str_replace(',', '.', $array[0]))*floatval(str_replace(',', '.', $array[1])); 
?>

此处str_replace()用于检查是否有, 在字符串中然后转换为其浮点值。 希望这会有所帮助。

答案 3 :(得分:0)

$data  = '10 x 2,5';
$array = explode("x", $data);

$decimal =$array[1];

//replace the comma with dot
$decimal_formated = str_replace(',', '.', $decimal);
//format the string to float
$decimal_formated = (float)$decimal_formated;
//OR $decimal_formated = floatval($decimal_formated);

//get total
$total = $array[0]*$decimal_formated;

//french format $total, with comma
$total_with_comma =number_format($total, 1, ',', ' ');


echo $decimal.'</br>'; //output 2,5
echo $decimal_formated.'</br>'; //output 2.5
echo $total.'</br>'; //output 25
echo $total_with_comma.'</br>'; // output 25,0

您可以使用number_format()floatval()