PHP взорваться, не заполняя место в массиве 0 - PullRequest
0 голосов
/ 17 марта 2010

У меня есть файл, который мы назовем info.txt в формате UNIX, в котором есть только следующее:

#Dogs
#Cats
#Birds
#Rabbits

и я запускаю это против него:

$filename = "info.txt";
$fd = fopen ($filename, "r");
$contents = fread ($fd,filesize ($filename));

fclose ($fd);
$delimiter = "#";
$insideContent = explode($delimiter, $contents);

Теперь все выглядит нормально, за исключением того, что когда я отображаю массив, я получаю следующее.

[0] => 
[1] => Dogs
[2] => Cats
[3] => Birds
[4] => Rabbits

Я проверил файл .txt, чтобы убедиться, что перед первым # не было пробелов или скрытых символов, поэтому я не понимаю, почему это происходит, за исключением того, что мне кажется, что я что-то ужасно упустил просто. Есть идеи?

Заранее спасибо!

Ответы [ 5 ]

6 голосов
/ 17 марта 2010

explode() разделяется на разделитель. Если перед первым разделителем ничего нет, то таким будет первый элемент. Ничего такого. Пустая строка.

2 голосов
/ 17 марта 2010

Я думаю, это потому, что самый первый символ - это разделитель, поэтому он помещает все, что слева от него в первом элементе, даже если это пустая строка. Таким образом, вы должны начать файл с «Dogs», а не «#Dogs»

0 голосов
/ 17 марта 2010

другой способ

$f=file("file");
print_r( preg_replace("/^#/","",$f) ) ;
0 голосов
/ 17 марта 2010

Вы можете взорваться с помощью новых строк и вообще не использовать #, хотя тогда у вас будет конечный пустой элемент. Я полагаю, что после анализа вам все равно придется выполнить некоторую проверку целостности (удалить первый / последний элемент, если он пуст).

0 голосов
/ 17 марта 2010

Ты запускаешь это как

# Dogs # Cats # # Птицы Кролики

PHP разбивает его, обрезая, поэтому, когда у вас есть собаки, он видит это как «Пустое пространство» Собаки.

Вы можете легко заполнить [0], используя array_shift ($ input, 1);

...