Billy Winterhouse
Billy Winterhouse

Reputation: 3

PHP explode not filling in array spot 0

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

Answers (5)

ghostdog74
ghostdog74

Reputation: 343181

another way

$f=file("file");
print_r( preg_replace("/^#/","",$f) ) ;

Upvotes: 0

mga
mga

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

JonnyLitt
JonnyLitt

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

Tesserex
Tesserex

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

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

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

Related Questions