PHP is_numeric不使用数组值

时间:2012-09-18 07:15:57

标签: php arrays csv

我试图跳过CSV文件中的前几行。在其余行中,第一列是序数 - 1,2,3等。但由于某种原因,使用is_numeric完全失败。我认为它可能是引号,但手册中的测试数组有引号,它会正确打印答案。

打开并检查$ afile ...

    while (($row = fgetcsv($afile)) !== FALSE) {
        // first three rows don't have numbers in first column
        if (is_numeric($row[0]))
            print "<tr><td>{$row[7]}</td></tr>";
        else
           print "not numeric: {$row[0]}<br/>";
   }

一切都是“非数字”!

当我print_r数组时,列中仍然有引号,所以我尝试运行str_replace来删除引号,并且is_numeric 仍然始终显示为false ...

完全莫名其妙,希望有人可以提供帮助,我希望这只是一个愚蠢的“午夜编码”问题......

[编辑]

好的,我怀疑它与数据有关,但我看不出有什么不对。当我在BBEdit中“显示隐形”时,我在每个角色之间得到一个颠倒的问号。见:

Image

所以..这很奇怪。假设我将一直得到这些不可见的东西,直到我能够找出导出的数据.. PHP可以做任何事情来清理数据吗?也许是一个字符集问题?

[再次编辑]感谢martinstoeckli,我使用mb_convert_string转换了数据,现在is_numeric正确返回。

4 个答案:

答案 0 :(得分:2)

is_numeric的一个非常简单的替代方法是检查你是否检查int是:

if ($row[0] == (string)(int)($row[0]))

或者如果您担心尾随空格的可能性,请检查strlen($row[0]) == strlen((int)$row[0])

答案 1 :(得分:1)

也许有帮助:

settype($row[0], "int");

答案 2 :(得分:0)

根据屏幕截图,csv文件是一个UTF-16编码的Unicode文件。这些文件对每个字符使用2个字节。如果将内容转换为UTF-8,您应该能够正常处理字符串,当然这将适用于从文件中读取的所有变量(不仅仅是第一个数字)。

$rowNumber = mb_convert_encoding($row[0],'utf8','utf-16');
if (is_numeric($rowNumber))
{
  ...
}

答案 3 :(得分:0)

我做is_numeric((string)(int)$content);