我能够从文件中读取并创建一个数组但是我收到以下错误:注意:未定义的偏移量: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);
我不太确定问题是什么?任何帮助将不胜感激!
谢谢!
答案 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);