对文本文件使用explode()时的未定义偏移量

时间:2012-06-24 18:38:24

标签: php arrays warnings offset explode

我打算从一个名为itest.txt的文本文件中提取内容,该文件包含10万个数字,每行一个数字。

我打印了恰好是$contents类型的string内容,所以所有数字都用空格分隔。

使用explode()后,我假设$ints每个索引包含一个数字,但事实并非如此。我试图每个索引有一个数字,$ints[0] =第一个数字,依此类推。后来我希望将它们转换为整数,但我似乎无法通过字符串数组问题。结果我得到了未定义的偏移误差。

如果我的问题不明确,请回​​复我,我对for循环中的代码有点担心,看起来不太专业。

这是我的代码:

$filename = 'C:\xampp\htdocs\coInv\itest.txt';
$fd       = fopen($filename, "r");
$contents = fread($fd, filesize($filename));    
$ints     = explode(" ", $contents);    
echo $ints[0];  // displays all the elements of the string.


for( $i=0 ; $i<100000 ; )
{
    $ints[$i] = int($ints[$i]);
    echo $ints[$i++];
}

3 个答案:

答案 0 :(得分:3)

你必须通过换行符而不是空格来爆炸,以匹配你的输入:

$ints = explode("\n",$contents);

答案 1 :(得分:2)

由于您只获得了包含整个文件的单个数组元素,这意味着您在explode()调用中的" "是错误的 - 其中没有可用于爆炸的空格。你说它是“一个人”,所以我建议使用"\n"是爆炸参数。但是,这取决于究竟是什么类型的文本文件:windows,mac,unix。你可能需要稍微玩一下。

但是,由于您只是加载文件,因此您可以跳过整个fopen / fread业务,并执行以下操作:

$lines = file('ivtest.txt');
foreach ($lines as $line) {
   echo $line;
}

file()加载文件并自动将行拆分为数组。

答案 2 :(得分:0)

要从文件中获取所有整数值(每行一个整数)到数组中,您应该使用file函数,然后将每一行映射到it's integer value

$filename = 'C:\xampp\htdocs\coInv\itest.txt';
$ints = array_map('intval', file($filename));