Tutorial :Extract floating point numbers from a string in PHP



Question:

I would like to convert a string into floating numbers. For example

152.15 x 12.34 x 11mm  

into

152.15, 12.34 and 11  

and store in an array such that $dim[0]=152.15, $dim[1]=12.34, $dim[2]=11.

I would also need to handle things like

152.15x12.34x11 mm    152.15mmx12.34mm x 11mm  

Thank you.


Solution:1

$str = '152.15 x 12.34 x 11mm';  preg_match_all('!\d+(?:\.\d+)?!', $str, $matches);  $floats = array_map('floatval', $matches[0]);  print_r($floats);  

The (?:...) regular expression construction is what's called a non-capturing group. What that means is that chunk isn't separately returned in part of the $mathces array. This isn't strictly necessary in this case but is a useful construction to know.

Note: calling floatval() on the elements isn't strictly necessary either as PHP will generally juggle the types correctly if you try and use them in an arithmetic operation or similar. It doesn't hurt though, particularly for only being a one liner.


Solution:2

<?php    $s = "152.15 x 12.34 x 11mm";    if (preg_match_all('/\d+(\.\d+)?/', $s, $matches)) {      $dim = $matches[0];  }    print_r($dim);    ?>  

gives

Array  (      [0] => 152.15      [1] => 12.34      [2] => 11  )  


Solution:3

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


Solution:4

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

Tested it and it works on all strings above.


Solution:5

preg_match_all("/\d*\.?\d+|\d+/", "152.15mmx12.34mm x .11mm", $matches);  

This example supports numbers like .11 as well, since they are valid numbers. $matches[0] will contain 152.15, 12.34 and 0.11, given that you type cast the result to float. If you don't 0.11 will appear as .11. I would type cast using array_map.

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

You can use the values for anything math without type casting them though. casting is just needed when printing them directly.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »