从文件中读取并创建关联数组?

时间:2015-03-20 14:10:31

标签: php arrays text-files associative-array

我能够从文件中读取并创建一个数组但是我收到以下错误:注意:未定义的偏移量: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 个答案:

答案 0 :(得分: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
)

答案 1 :(得分:1)

原因是爆炸功能会将您的读入数据拆分为&#34; \ r \ n&#34;。并且你在最后一行之后有了一个新行,这就是导致最后一个&#34;数组&#34;没有键或值。要解决此问题,请将以下行替换为$my_array = explode("\r\n", $theData);

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