|
|
|
|
|
для: sim5
(10.02.2011 в 04:30)
| | О, убейте, не помню, почему решил ввести пользовательскую функцию.
Спасибо за поправку. | |
|
|
|
|
|
|
|
для: sim5
(09.02.2011 в 18:56)
| | Дык я ответил сначала, а потом увидел ответ про эррей_юник.
В перле такой функции нет, поэтому я бы прогнал цикл по предложенному алгоритму. | |
|
|
|
|
|
|
|
для: neadekvat
(09.02.2011 в 21:56)
| | array_map может принимать в качестве аргумента встроенные функции, то есть:
$arr = array_map('trim', $arr);
| Ваша пользовательская функция к тому же не учитывает пробелы. | |
|
|
|
|
|
|
|
для: quckly
(09.02.2011 в 20:40)
| | Да прочтут и поправят меня более опытные пользователи, но по делу что-то как-то типа так.
Если вам привычнее читать что-то более научное и сухое - то сюда. Советую посетить в любом случаи, ибо я только поверхностно.
Итак, машине надо как-то сказать, что в данном конкретном месте следует создать новую строку. Для этого существуют спец. символы. Не буду говорить о разных системах счисления, бла-бла - я сам это наизусть не помню, так как никогда не сталкивался. Скажу, как это пригодится при работе в пхп.
Сначала, какие эти спец. символы бывают.
\n - новая строка (по-колхозному - интер нажимаете - курсор на новой строке)
\r - возврат каретки (то же, что происходит, если вы уже набрали несколько символов и нажимаете клавишу Home на клавиатуре - курсор переходит в самое начально строки).
Так вот, к сожалению, как обычно, разные системы считают по разному.
Так, например, в винде за новую строку считается \r\n (как в печатных машинках - надо и прокрутить бумажку, и каретку назад вернуть).
В Юникс системах - \n, т.к. по большей части сервера крутятся на линуксах, фряхах и т.д., то чаще будет встречаться это.
В Маках - там вообще \r считается за новую строку (но серверов на маке я еще не встречал).
Теперь по поводу того, как записывать. Сразу код:
<?php
file_put_contents("1\n2\n3", $fle);
|
Если мы откроем теперь это в редакторе, то увидим
С таким же успехом вы можете вместо \n написать \r\n (но зачем создавать себе же заморочки?), главное, чтобы спец. символы были указаны в двойных кавычках. В одинарных (') эта магия не подействует и вы получите в редакторе именно то, что передали на запись:
Теперь, что касается функции file.
Она возвращает в виде массива строки из файла. При этом, если внимательно прочитать мануал, можно узнать, что она не отрезает от строки конечный символ.
Т.е. по сути, из этого файла:
вы получите следующие строки:
0 => 1\n,
1 => 2\n,
2 = 3\n,
ну, или \r\n, смотря как был записан файл (в моем редакторе, например, можно выбрать, каким стандартом будет обозначаться конец строки).
Таким образом, чтобы у вас успешно заработала функция array_anique, вам придется таки удлинить код:
Вариант первый - забирать весь файл и разбивать на массив вручную.
Вариант второй - избавлять строки от уже ненавистных переносов.
<?php
function own_trim($arg)
{
return rtrim($arg, "\r\n");
}
$arr = file('file');
$arr = array_map('own_trim', $arr);
print_r(array_unique($arr));
|
Вариант третий - дописывать к файлу в конец собственно символ конца строки. Однако считайте, что вы не видели этого варианта.
Возможно, есть еще какие-то варианты, но после дня бурного секса с сервером и кодинга голова не особо варит. | |
|
|
|
|
|
|
|
для: neadekvat
(09.02.2011 в 19:15)
| | Чет я не понял .. | |
|
|
|
|
|
|
|
для: neadekvat
(09.02.2011 в 19:18)
| | \r\n под Win ;-) | |
|
|
|
|
|
|
|
для: sim5
(09.02.2011 в 19:16)
| | Ой, все, допер.
Главное ж - думаю, там пробел или возврат каретки небось, но решил проверить - и сам же попался. | |
|
|
|
|
|
|
|
для: neadekvat
(09.02.2011 в 19:15)
| | Я вам по ошибке только что "плюнул", теперь вы мне? :) | |
|
|
|
|
|
|
|
для: sim5
(09.02.2011 в 19:13)
| | Попробуйте следующий код - довольно интересный результат получается (посмотрите на числовой индекс последнего значения)
<?php
$str = '1
2
3
4
5
5
5
5';
$arr = explode("\n", $str);
print_r(array_unique($arr));
|
| |
|
|
|
|
|
|
|
для: quckly
(09.02.2011 в 19:07)
| | Значит ваши две шестерки не равны, то есть один индекс может и содержит 6, а другой 6 но с пробелом, или даже с двумя по краям. | |
|
|
|
|