1

我打算从一个名为的文本文件中提取内容,该文件itest.txt由 100 000 个数字组成,每行一个数字。

我打印了$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++];
}
4

3 回答 3

3

您必须按换行符而不是空格来爆炸以匹配您的输入:

$ints = explode("\n",$contents);
于 2012-06-24T18:40:20.940 回答
2

由于您得到的只是一个包含整个文件的数组元素,这意味着您" "在 explode() 调用中是错误的 - 那里没有空间可供 explode 处理。你说它是“一个人”,所以我建议使用"\n"爆炸参数。但是,这取决于这是什么类型的文本文件:windows、mac、unix。你可能需要玩一点。

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

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

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

于 2012-06-24T18:40:50.933 回答
0

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

$filename = 'C:\xampp\htdocs\coInv\itest.txt';
$ints = array_map('intval', file($filename));
于 2012-06-24T19:18:40.733 回答