2015-03-20 2 views
0

Я могу читать из файла и создавать массив, однако я получаю следующую ошибку: Примечание: Неопределенное смещение: 1. В моем массиве есть один пустой элемент, и я не понимаю, почему он пуст.Прочитать из файла и создать ассоциативный массив?

Мой текстовый файл в следующем формате:

#EXTINF:0,ABC family USA[]http://localhost/IpInfo/index.html 
#EXTINF:0,CBC[]http://localhost/IpInfo/index1.html 
#EXTINF:0,A&E[]http://localhost/IpInfo/index2.html 

Вот мой код:

$fh = fopen('file1.txt', 'r'); 
$theData = fread($fh, filesize('file1.txt')); 
$arr = array(); 
$my_array = explode("\r\n", $theData); 

foreach($my_array as $line){ 
    $tmp = explode("[]", $line); 
    $arr[$tmp[0]] = $tmp[1]; 
} 
fclose($fh); 

echo '<pre>'; 
echo print_r($arr); 

Я не совсем уверен, что проблема? Любая помощь приветствуется!

Спасибо!

ответ

2

Возможно, ваши входные данные не используют \r\n в качестве разделителя строк? Я не уверен, полностью ли у меня проблема. Также вы можете принять пустые строки.

Я хотел бы использовать функцию file(), что упрощает перебрать строк файла и может работать с Windows, и каналы Unix строки и проверить пустые строки:

$arr = array(); 

foreach(file('a.txt') as $line){ 
    // I'm using `trim()` here since $line 
    // will still contain the newline delimiter 
    $line = trim($line); 

    // Skip empty lines 
    if(empty($line) { 
     continue; 
    } 

    $tmp = explode("[]", $line); 
    $arr[$tmp[0]] = trim($tmp[1]); 
} 

echo '<pre>'; 
print_r($arr); 

Выход:

<pre>Array 
(
    [#EXTINF:0,ABC family USA] => http://localhost/IpInfo/index.html 
    [#EXTINF:0,CBC] => http://localhost/IpInfo/index1.html 
    [#EXTINF:0,A&E] => http://localhost/IpInfo/index2.html 
) 
+0

спасибо, однако я все еще получаю ошибку при: $ обр [$ TMP [0]] = подрезать ($ TMP [1]); Такая же ошибка, как и раньше, неопределенное смещение 1? – dantheman

+0

Проверьте мое обновление – hek2mgl

+0

ahh, который отлично сработал благодаря вам! – dantheman

1

Причина в том, что функция разрыва разбивает ваши данные для чтения на «\ r \ n». И у вас есть новая строка после последней строки, и именно это приводит к последнему «массиву» без ключей или значений. Чтобы это исправить, заменить эту строку: $my_array = explode("\r\n", $theData); с этим:

$my_array = explode("\r\n", $theData); 
array_pop($my_array); 
+0

плюс один, поскольку подсказка: «у вас есть пустая строка на end ", был опубликован вами первым! – hek2mgl

Смежные вопросы