使用逗号作为数组中的小数点搜索数字

时间:2016-10-06 10:34:29

标签: php regex

我必须搜索Excel文件,并将逗号作为小数点的数字转换为小数点。(例如:23,56 - > 23.56,23123,566 - > 23123.566) 。我已经将excel文件导出到.csv并将所有内容放入数组但我无法用逗号查找数字。 这是我的一个数组的样子:

    Array
    (
        [A1] => 1
        [A2] => 123123
        [A3] => dasdadwa
        [A4] => 6,7
        [A5] => 24f,5
        [A6] => f5,5
        [A7] => dasdad,fsdfsdfsfsasada dasdasd
        [A8] => aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
        [A9] => dasdasd
        [A10] => q231e
        [A11] => 
        [A12] => 0
        [A13] => 
        [A14] => 
        [A15] => 1
        [A16] => 123123
        [A17] => dasdadwa
        [A18] => 6,7
        [A19] => 24f,5
        [A20] => f5,5
        [A21] => dasdad,fsdfsdfsfsasada dasdasd
        [A22] => 
        [A23] => 
        [A24] => q231e
        [A25] => 
        [A26] => 0
        [A27] => 
        [A28] => 
        [A29] => 1
        [A30] => 123123
        [A31] => dasdadwa
        [A32] => 6,7
        [A33] => 24f,5
        [A34] => f5,5
        [A35] => dasdad,fsdfsdfsfsasada dasdasd
        [A36] => 
        [A37] => 
        [A38] => q231e
        [A39] => 
        [A40] => 
        [A41] => 
        [A42] => 
    )

我只对只有数字和逗号的字符感兴趣,但这很麻烦,因为这些条目是字符串。我试过搞乱正则表达式,但我无法让它工作。 以下是我到目前为止的情况:

    function csv_to_array($filename='', $delimiter=',')
    {
        if(!file_exists($filename) || !is_readable($filename))
            return FALSE;

        $header = NULL;
        $data = array();
        if (($handle = fopen($filename, 'r')) !== FALSE)
        {
            while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
            {
                if(!$header)
                    $header = $row;
                else
                    $data[] = array_combine($header, $row);
            }
            fclose($handle);
        }
        return $data;
    }

$contents = csv_to_array($filename.'.csv');

    foreach($contents as $val) 
    {

        //If $val is a number separated by comma
             //Replace comma with . (str_replace(',','.');, $val);)
    }

3 个答案:

答案 0 :(得分:3)

只是简单的模式,它将只替换你的模式:

//rest od your code and now:
foreach($contents as $key => $val) 
{
  $contents[$key] = preg_replace('/^(\d+),(\d+)$/', '\1.\2', $val);
}

此代码仅触及2,3等字符串。像ff,333这样的字符串将无法触及

答案 1 :(得分:0)

由于您只想提取小数,我建议使用正则表达式,如下所示:

foreach($contents as $val) {
    // if $val is a number separated by comma
    if (preg_match('/^[0-9]+,[0-9]+$/', $val) == 1) {
         // transform into float with two decimals and dot as decimal separator
         $float = number_format($val, 2, '.');
    }
}

编辑:评论后更新的正则表达式模式。

答案 2 :(得分:-3)

喜欢这个吗?

foreach($contents as $val) 
{
    if (strpos($val, ',') !== false) {
        $val = str_replace(',', '.', $val);
    }
}