我正在使用一个我初始化的关联数组:
$img_captions = array();
然后,在代码中稍后我在一个while循环中填充它,其中键和值来自.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 ...
我对这里发生的事情毫无头绪 - 有人可以告诉我吗?
BTW我正在使用带有PHP 5.3的USBWebserver。
UPDATE 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照片 需要但我们正在讨论的那些特定部分是 FROM THE 原始作者
答案 0 :(得分:2)
您的代码变得简短易读,易于理解。
$parts= file('your text file url', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$img_captions = [];
foreach($parts as $img_capts){
list($img_filename, $img_caption) = explode('|', $img_capts);
$img_captions[trim(preg_replace("/&#?[a-z0-9]+;/i","",$img_filename))] = trim(preg_replace("/&#?[a-z0-9]+;/i","",$img_caption));
}
print_r($img_captions);
答案 1 :(得分:0)
所以过了一段时间我发现我的.txt
文件本身有问题: -
总是在第一行的前面放置一些奇怪的标志,无论我做什么,它总是随着SCRATCH创建的新文件(尽管那些不可见,除非在网页上看作是源代码!!!)
所以我决定用另一种格式测试它,这次是.log文件,突然间一切正常。
我不知道这是不是我当地的某种问题(很可能是)或其他我不知道的问题。
但我的解决方案 就是更改了保存字符串对的文件类型(.txt => .log),解决了这个问题&#39 ;对我来说。
一些 其他可能的解决方案 ,因为@AbraCadaver说:
(那些奇怪的迹象:[0] => f1.jpg)这是一个BYTE ORDER MARK或BOM的HTML实体,保存你的文件 在您正在使用的任何编辑器中都没有BOM。