PHP bir dizeden kayan noktalı sayılar Özü

4 Cevap php

Ben kayan sayılar bir dize dönüştürmek istiyorum. Örneğin

152.15 x 12.34 x 11mm

içine

152.15, 12.34 and 11

ve bir dizi mağaza $ [0] = 152.15 $ [1] = 12.34, $ dim dim dim böyle [2] 11 =.

Ben de böyle şeyler işlemek gerekir

152.15x12.34x11 mm

152.15mmx12.34mm x 11mm

Teşekkür ederim.

4 Cevap

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

(?:...) düzenli ifade inşaat non-capturing group adlandırılan şeydir. Ne demektir ki öbek ayrı ayrı $mathces dizinin parçası döndürdü değildir. Bu in this case kesinlikle gerekli değil ama bilmek yararlı bir yapıdır.

Note: floatval() unsurları çağıran PHP genellikle doğru türlerini dengelemek olacak gibi denemek ve bir aritmetik işlem veya benzeri bunları kullanmak ya eğer kesinlikle gerekli değildir. Özellikle yalnızca bir astar olduğu için olsa zarar vermez.

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

Test ve yukarıdaki tüm dizeleri çalışır.

<?php

$s = "152.15 x 12.34 x 11mm";

if (preg_match_all('/\d+(\.\d+)?/', $s, $matches)) {
    $dim = $matches[0];
}

print_r($dim);

?>

verir

Array
(
    [0] => 152.15
    [1] => 12.34
    [2] => 11
)
preg_match_all("/\d*\.?\d+|\d+/", "152.15mmx12.34mm x .11mm", $matches);

Onlar geçerli sayılar olduğu için bu örnek, aynı zamanda .11 gibi numaraları destekler. $matches[0] Eğer dalgalanmaya sonucu döküm tipi göz önüne alındığında, 152.15, 12.34 ve 0.11 içerir. Eğer 0.11 olarak görünecektir yoksa .11. I array_map kullanılarak döküm yazarsınız.

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

Gerçi onları döküm türü olmadan bir şey matematik için değerleri kullanabilirsiniz. onları doğrudan yazdırırken döküm sadece gereklidir.