【发布时间】:2018-06-29 01:33:20
【问题描述】:
我正在使用我这样初始化的关联数组:
$img_captions = array();
然后,稍后在代码中,我将使用来自 .txt 文件的键和值填充它(该 .txt 文件中的每一行都包含一对 - 一个字符串 - 由“|”分隔)看起来像这样:
f1.jpg|This is a caption for this specific file
f2.jpg|Yea, also this one
f3.jpg|And this too for sure
...
我正在用这样的数据填充关联数组:
if (file_exists($currentdir ."/captions.txt"))
{
$file_handle = fopen($currentdir ."/captions.txt", "rb");
while (!feof($file_handle) )
{
$line_of_text = fgets($file_handle);
$parts = explode('/n', $line_of_text);
foreach($parts as $img_capts)
{
list($img_filename, $img_caption) = explode('|', $img_capts);
$img_captions[$img_filename] = $img_caption;
}
}
fclose($file_handle);
}
当我测试该关联数组是否实际包含键和值时:
print_r(array_keys($img_captions));
print_r(array_values($img_captions));
...我看到它按预期包含它们,但是当我尝试通过直接调用来实际使用它们时,例如:
echo $img_captions['f1.jpg'];
我收到 PHP 错误提示:
注意:未定义索引:f1.jpg in...
我不知道这里发生了什么 - 谁能告诉我吗?
顺便说一句,我正在使用带有 PHP 5.3 的 USBWebserver。
更新 1: 所以通过更好地探索 'print_r(array_keys($img_captions));' 的输出在 Chrome 中(F12 键)我注意到一些奇怪的东西 - '[0] => f1.jpg' 的第一行看起来很奇怪 虽然它在网站上显示为 print_r() 输出时看起来很正常,我注意到它实际上在网页源代码(F12)中实际上是这样编码的:
Array
(
[0] => f1.jpg
[1] => f2.jpg
[2] => f3.jpg
[3] => f4.jpg
[4] => f5.jpg
[5] => f6.jpg
[6] => f7.jpg
[7] => f8.jpg
[8] => f9.jpg
[9] => f10.jpg
)
因此,当我测试除 1. 行之外的任何其他内容时,它都可以正常工作。我试图完全删除文件并重新写入一次,但仍然发生同样的情况......
免责声明 伙计们,只是为了更准确地澄清一下:这不是我的原始代码(即“完全由我完成”),它是 实际上是我刚刚制作的 MiniGal Nano PHP 照片集以适合我的 需要,但我们正在谈论的那些特定部分是来自 原作者
【问题讨论】:
-
print_r(array_keys($img_captions));的输出是什么? -
您的代码有几个问题:Don't use
while (!feof($file_handle))。'/n'应该是"\n"(错误的引号,错误的斜线)。 -
首先没有必要在换行符上爆炸,因为
fgets()只读取一行。 -
我敢打赌,实际的问题是文件中的文件名字段之前或之后有空格。
-
这是 BYTE ORDER MARK 或 BOM 的 HTML 实体,在您使用的任何编辑器中保存没有 BOM 的文件。或者它以其他方式到达那里。
标签: php arrays associative-array array-key