# 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 »