Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Не работет скрипт нахождения одинаковых строк

Сообщения:  [1-10]   [11-19] 

 
 автор: neadekvat   (10.02.2011 в 10:37)   письмо автору
 
   для: sim5   (10.02.2011 в 04:30)
 

О, убейте, не помню, почему решил ввести пользовательскую функцию.
Спасибо за поправку.

  Ответить  
 
 автор: SHAman   (10.02.2011 в 10:02)   письмо автору
 
   для: sim5   (09.02.2011 в 18:56)
 

Дык я ответил сначала, а потом увидел ответ про эррей_юник.

В перле такой функции нет, поэтому я бы прогнал цикл по предложенному алгоритму.

  Ответить  
 
 автор: sim5   (10.02.2011 в 04:30)   письмо автору
 
   для: neadekvat   (09.02.2011 в 21:56)
 

array_map может принимать в качестве аргумента встроенные функции, то есть:
$arr = array_map('trim', $arr);
Ваша пользовательская функция к тому же не учитывает пробелы.

  Ответить  
 
 автор: neadekvat   (09.02.2011 в 21:56)   письмо автору
 
   для: quckly   (09.02.2011 в 20:40)
 

Да прочтут и поправят меня более опытные пользователи, но по делу что-то как-то типа так.

Если вам привычнее читать что-то более научное и сухое - то сюда. Советую посетить в любом случаи, ибо я только поверхностно.

Итак, машине надо как-то сказать, что в данном конкретном месте следует создать новую строку. Для этого существуют спец. символы. Не буду говорить о разных системах счисления, бла-бла - я сам это наизусть не помню, так как никогда не сталкивался. Скажу, как это пригодится при работе в пхп.

Сначала, какие эти спец. символы бывают.
\n - новая строка (по-колхозному - интер нажимаете - курсор на новой строке)
\r - возврат каретки (то же, что происходит, если вы уже набрали несколько символов и нажимаете клавишу Home на клавиатуре - курсор переходит в самое начально строки).

Так вот, к сожалению, как обычно, разные системы считают по разному.
Так, например, в винде за новую строку считается \r\n (как в печатных машинках - надо и прокрутить бумажку, и каретку назад вернуть).
В Юникс системах - \n, т.к. по большей части сервера крутятся на линуксах, фряхах и т.д., то чаще будет встречаться это.
В Маках - там вообще \r считается за новую строку (но серверов на маке я еще не встречал).

Теперь по поводу того, как записывать. Сразу код:
<?php
file_put_contents
("1\n2\n3"$fle);

Если мы откроем теперь это в редакторе, то увидим
1
2
3

С таким же успехом вы можете вместо \n написать \r\n (но зачем создавать себе же заморочки?), главное, чтобы спец. символы были указаны в двойных кавычках. В одинарных (') эта магия не подействует и вы получите в редакторе именно то, что передали на запись:
1\n2\n3


Теперь, что касается функции file.
Она возвращает в виде массива строки из файла. При этом, если внимательно прочитать мануал, можно узнать, что она не отрезает от строки конечный символ.
Т.е. по сути, из этого файла:
1
2
3

вы получите следующие строки:
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));

Вариант третий - дописывать к файлу в конец собственно символ конца строки. Однако считайте, что вы не видели этого варианта.

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

  Ответить  
 
 автор: quckly   (09.02.2011 в 20:40)   письмо автору
 
   для: neadekvat   (09.02.2011 в 19:15)
 

Чет я не понял ..

  Ответить  
 
 автор: sim5   (09.02.2011 в 19:19)   письмо автору
 
   для: neadekvat   (09.02.2011 в 19:18)
 

\r\n под Win ;-)

  Ответить  
 
 автор: neadekvat   (09.02.2011 в 19:18)   письмо автору
 
   для: sim5   (09.02.2011 в 19:16)
 

Ой, все, допер.
Главное ж - думаю, там пробел или возврат каретки небось, но решил проверить - и сам же попался.

  Ответить  
 
 автор: sim5   (09.02.2011 в 19:16)   письмо автору
 
   для: neadekvat   (09.02.2011 в 19:15)
 

Я вам по ошибке только что "плюнул", теперь вы мне? :)

  Ответить  
 
 автор: 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));

  Ответить  
 
 автор: sim5   (09.02.2011 в 19:13)   письмо автору
 
   для: quckly   (09.02.2011 в 19:07)
 

Значит ваши две шестерки не равны, то есть один индекс может и содержит 6, а другой 6 но с пробелом, или даже с двумя по краям.

  Ответить  

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования