我试图跳过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中“显示隐形”时,我在每个角色之间得到一个颠倒的问号。见:
所以..这很奇怪。假设我将一直得到这些不可见的东西,直到我能够找出导出的数据.. PHP可以做任何事情来清理数据吗?也许是一个字符集问题?
[再次编辑]感谢martinstoeckli,我使用mb_convert_string转换了数据,现在is_numeric正确返回。
答案 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);