我正在尝试跳过 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 still 始终显示为 false...
完全困惑,希望有人能帮忙,我希望这只是一个愚蠢的“午夜编码”问题......
[已编辑]
好吧,我怀疑数据有问题,但我看不出有什么问题。当我在 BBEdit 中“显示不可见内容”时,我在每个字符之间看到一个颠倒的问号。请参阅:
所以..这很奇怪。假设我会一直获取这些不可见的数据,直到我能够找出导出的数据.. PHP 可以做任何事情来清理数据吗?也许是字符集问题?
[再次编辑]感谢 martinstoeckli,我使用 mb_convert_string 转换了数据,is_numeric 现在可以正确返回。
最佳答案
is_numeric 的一个非常简单的替代方法是检查您是否正在检查 int is:
if ($row[0] == (string)(int)($row[0]))
或者,如果您担心尾随空格的可能性,请检查 strlen($row[0]) == strlen((int)$row[0])
关于PHP is_numeric 不适用于数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12472111/