За последние 24 часа нас посетили 30782 программиста и 1481 робот. Сейчас ищут 904 программиста ...

Детальное сравнение строк.

Тема в разделе "PHP для новичков", создана пользователем darkgod, 22 янв 2011.

  1. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Доброго всем времени суток! нужна помощь от гуру!

    нужно сравнить 2 строки:

    например
    Код (Text):
    1. Eagle F1 Asymmetric   xl
    должна равняться строке

    Код (Text):
    1. F1 eagle Asymmetric xl
    - здесь слова переменены местами, второе слово с маленькой буквы и перед xl один пробел вместо 3-х

    но не может равняться строке

    Код (Text):
    1. F1 eagle Asymmetric
    - здесь нет xl
     
  2. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Разбить на массив по пробелам. Либо explode, либо preg_split, что больше подходит.
    Отсортировать массивы.
    Сравнить массивы (это достаточно просто).

    Ну или как-то сравнить без сортировки даже можно (возможно)
     
  3. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    я про это тоже думал, но у меня таким образом будет сравниваться за раз цикл из порядка 1000-2000 записей. насколько такой подход мне подходит и как сильно нагрузит хостинг-провайдера я незнаю...

    А нет ли какого метода чтобы убрать вообще все пробелы, отсортировать строки по алфавиту и их сохранить?
     
  4. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    preg, но чтобы отсортировть по алфавиту придется сделать массив. Думаю факт массива не так сильно нагрузит сервер, нежели факт проверки 3000 строк. Возможно следует пересмотреть постановку задачи, которая привела вас к такому решению.

    Может быть решено с помощью СУБД.
     
  5. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    еще может быть случай когда запись имеете вид
    Код (Text):
    1. bravuris 2
    а строка с которой идет сравнение
    Код (Text):
    1. bravuris2
    и тут уже разбивка сроки на массив не поможет
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Задача превратилась бред в последнем сообщении.
     
  7. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    и почему-же в бред? вы наверное никогда не делали импорт в базу, когда обменный файл приходит черт знает какой и не понятно по каким правилам собран... а когда этих файлов еще 10 разных от различных фирм...
     
  8. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    darkgod
    Компьютер не может провести такой анализ, который не может провести сам человек. И наоборот.
    Если есть строки:
    Код (Text):
    1. bat34 alpha
    и строка
    Код (Text):
    1. bat 34 alpha
    да ещё
    Код (Text):
    1. bat3 4alpha
    То при таком раскладе для человека эта задача становится неясной, потому что тут даже по словарю подбор не сделать.
    Если найти какую-то логику, то можно написать свой синтаксический анализатор, который будет ошибаться на таких строчках хотя бы через раз.

    Есть, кстати, определение алгоритма, где четко сказано, что это КОНКРЕТНЫЙ порядок действий приводящий к КОНКРЕТНЫМ результатам. Конкретного порядка тут нет и быть не может, значит задача либо не решаема, либо может быть приведена к решаемой путем построения КОНКРЕТНЫХ действий.