PHP Associative array strange behavior

errerr

I am using an associative array which I initialized like this:

$img_captions = array();

Then, later in the code I am filling it in a while loop with keys and values coming in from a .txt file (every line in that .txt file contains a pair - a string - separated by '|') looking like this:

f1.jpg|This is a caption for this specific file
f2.jpg|Yea, also this one
f3.jpg|And this too for sure
...

I am filling the associative array with those data like this:

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);
}

When I test that associative array if it actually contains keys and values like:

print_r(array_keys($img_captions));
print_r(array_values($img_captions));

...I see it contains them as expected, BUT when I try to actually use them with direct calling like, let's say for instance:

echo $img_captions['f1.jpg'];

I get PHP error saying:

Notice: Undefined index: f1.jpg in...

I am clueless what is going on here - can anyone tell, please?

BTW I am using USBWebserver with PHP 5.3.

UPDATE 1: so by better exploring the output of the 'print_r(array_keys($img_captions));' inside Chrome (F12 key) I noticed something strange - THE FIRST LINE OF '[0] => f1.jpg' LOOKS VISUALLY VERY WEIRD tho it looks normal when displayed as print_r() output on the site, I noticed it actually in fact is coded like this in webpage source (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
)

So when I tested anything else than the 1. line it works OK. I tryed to delete completely the file and re-write it once again but still the same occurs...

DISCLAIMER Guys, just to clarify things more properly: THIS IS NOT MY ORIGINAL CODE (that is 'done completely by me'), it is actually a MiniGal Nano PHP photogalery I had just make to suit my needs but those specific parts we are talking about are FROM THE ORIGINAL AUTHOR

errerr

So after a while I realize there is something wrong with my .txt file itself as it:-

ALWAYS PUT SOME STRANGE SIGNS IN FRONT OF THE 1st LINE WHATEVER I DO IT WAS ALWAYS THERE EVEN WITH THE NEW FILE CREATED FROM SCRATCH (although those are UNVISIBLE unless seen as a source code on a webpage!!!)

So I decided to test it in another format, this time .log file and all of a sudden everything works just fine.

I do not know if it is just my local problem of some sort (most probably is) or something else I am not aware of.

But my solution to this was changing the file type holding the string pairs (.txt => .log) which solved this 'problem' for me.

Some other possible solution to this as @AbraCadaver said:

(Those strange signs: [0] => f1.jpg) That's the HTML entity for a BYTE ORDER MARK or BOM, save your file with no BOM in whatever editor you're using.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related