从文件中读取并创建关联数组?
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);
我可以从一个文件中读取并创建一个数组,但是我收到以下错误:注意:未定义的偏移量: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);