2017-02-10 46 views
2

我在過濾具有浮點值的csv文件時遇到問題。下面是我做的一個例子:如何使用filter_var_array過濾浮點數

<?php 
$data = array(0.152,20,.205); 
$result = filter_var_array($data,FILTER_VALIDATE_FLOAT); 
var_dump($result); 
?> 

正如你看到的,在$data數組,第三浮動是無效的,它沒有一個整數部分,所以我希望得到一個假的$result,但不幸的是,這裏是我得到的:

16:24 $ php -q script.php 
array(3) { 
    [0]=> 
    float(0.152) 
    [1]=> 
    float(20) 
    [2]=> 
    float(0.205) 
} 

浮點數通過在點之前加一個0來得到濾波器的校正。由於價值從一開始就不正確,因此這沒有幫助。如何避免這種情況?

::編輯::

如果我使用此過濾器來代替:FILTER_SANITIZE_NUMBER_FLOAT,我得到一個零:

16:28 $ php -q script.php 
array(3) { 
    [0]=> 
    string(4) "0152" 
    [1]=> 
    string(2) "20" 
    [2]=> 
    string(4) "0205" 

我不知道如何確保我沒有通過invalide花車。

+2

'.205'是一個有效的浮動。 'php -r「echo .205;」'打印「0.205」。如果它不符合您的要求,則需要實施自定義篩選。 –

回答

2

問題是FILTER_VALIDATE_FLOAT會將通過驗證的值轉換爲float。

.205它似乎被認爲是一種有效的float並且因此被轉換(添加前導零)

參見docs

+0

我有一個問題,@Luke,這個過濾器FILTER_VALIDATE_FLOAT是否將文件中的.205浮點數修改爲0.205? – Somar

+0

@Somar裏面的文件?你的代碼顯示你從一個數組中讀取它們。 – Luke

+0

從我採取浮點值過濾的文件中。我在問題中說過,我有一個csv文件 – Somar