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

Read from file and create 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);

我不太确定是什么问题?任何帮助将不胜感激!

谢谢!

可能您的输入数据没有使用 \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
)

原因是explode函数在“\r\n”分割了你读入的数据。在最后一行之后有一个新行,这就是最后 "array" 没有键或值的结果。要解决此问题,请将此行:$my_array = explode("\r\n", $theData); 替换为:

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