Reputation: 3
I have a file we will call info.txt under UNIX format that has only the following in it:
#Dogs
#Cats
#Birds
#Rabbits
and am running this against it:
$filename = "info.txt";
$fd = fopen ($filename, "r");
$contents = fread ($fd,filesize ($filename));
fclose ($fd);
$delimiter = "#";
$insideContent = explode($delimiter, $contents);
Now everything looks to be working fine except when I display the array I get the following.
[0] =>
[1] => Dogs
[2] => Cats
[3] => Birds
[4] => Rabbits
I checked the .txt file to make sure there wasn't any space or hidden characters in front of the first # so I'm at a loss of why this is happening other than I feel like I'm missing something terribly simple. Any ideas?
Thanks in advance!
Upvotes: 0
Views: 1273
Reputation: 343181
another way
$f=file("file");
print_r( preg_replace("/^#/","",$f) ) ;
Upvotes: 0
Reputation: 1970
You could explode by newlines and not use the # at all although then you would have a trailing empty item. I guess you still have to do some integrity check (remove the first/last item if empty) after parsing.
Upvotes: 0
Reputation: 773
You're running it like
#Dogs#Cats#Birds#Rabbits
PHP splits it by cutting, thus where you have Dogs it sees it like 'Blank Space' | Dogs.
You can easily fill [0] by using array_shift($input, 1);
Upvotes: 0
Reputation: 17314
I would guess that it's because the very first character is a delimiter, so it's putting whatever's to the left of it in the first element, even if it's an empty string. So you would have to start the file with "Dogs", not "#Dogs"
Upvotes: 2
Reputation: 799550
explode()
splits on the delimiter. If there is nothing before the first delimiter, then that's what the first element will be. Nothing. An empty string.
Upvotes: 6