1

itest.txt各行に 1 つの数字で構成される 100 000 の数字で構成される名前のテキスト ファイルから内容を抽出することを計画しています。

$contentsたまたまタイプのコンテンツを印刷したstringので、すべての数字はスペースで区切られています。

使用後、インデックスごとに 1 つの数値が含まexplode()れると想定しましたが、そうではありません。インデックスごとに 1 つの数字、つまり最初の数字など$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

ファイル全体を含む配列要素を 1 つだけ取得しているため" "、explode() 呼び出しが間違っていることを意味します。explode が機能するためのスペースがそこにありません。「1人」とのことなので"\n"、explodeパラメータを使用することをお勧めします。ただし、これはテキスト ファイルの種類 (windows、mac、unix) によって異なります。あなたはそれで少し遊ぶ必要があるかもしれません。

ただし、ファイルをロードしているだけなので、fopen/fread ビジネス全体をスキップして、次のようにすることができます。

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

file()はファイルをロードし、行を自動的に配列に分割します。

于 2012-06-24T18:40:50.933 に答える
0

ファイルからすべての整数値 (行ごとに 1 つの整数) を配列に取得するには、file関数を使用してから、各行をその整数値にマップする必要があります。

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