2012-06-24 1 views
1

Я планирую извлечь содержимое из текстового файла с именем itest.txt, который состоит из 100 000 номеров, по одному номеру на каждой строке.Неопределенное смещение при использовании explode() для текстовых файлов

Я напечатал содержимое $contents, которое имеет тип string, поэтому все числа разделены пробелом.

После использования explode() Я предположил, что $ints будет содержать одно число на индекс, но это не тот случай. Я пытаюсь иметь один номер на индекс i.e $ints[0] = первый номер и так далее. Позже я хочу преобразовать их в целые числа, но, похоже, я не могу справиться с проблемой строкового массива. В результате я получаю ошибку Undefined offset.

Пожалуйста, вернитесь ко мне, если мой вопрос не ясен, и я немного опасаюсь кода в цикле 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++]; 
} 
+1

Что ваш вопрос? И какую часть сообщения об ошибке вы не понимаете конкретно? И почему бы вам не использовать функцию ['file'] (http://php.net/file), например:' $ ints = array_map ('intval', file ($ filename)); ' – hakre

ответ

3

Вы должны взорваться линии разрыва, а не пространство, чтобы соответствовать ввод:

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

Спасибо, проблема. –

2

Поскольку вы получаете только один элемент массива, содержит весь файл, что означает, что ваш " " в вызове explode() неверен - в нем нет пробелов для взрыва для работы. Вы говорите, что это «один человек», поэтому я бы предложил использовать "\n" - параметр explode. Однако это зависит от того, какой именно текстовый файл это: windows, mac, unix. Возможно, вам придется немного поиграть с ним.

Однако, так как вы просто загрузив файл, вы можете просто пропустить весь FOPEN/Fread бизнес, и сделать:

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

file() загружает файл и разбивает строки в массив для вас автоматически ,

+0

Это тоже очень хорошее решение! Спасибо! –

0

Чтобы получить все целые значения из файла (один целочисленный в каждой строке) в массив, вы должны использовать функцию file и затем сопоставить каждую строку it's integer value:

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