Сравнение в пхп

Тема в разделе "PHP программирование", создана пользователем Wetzel, 26 мар 2008.

Статус темы:
Закрыта.
  1. Wetzel

    Wetzel Гость

    Это поидеи код для сравнения строк из 2 разных массивов. Один как видите 10 строчный другой 100.
    Но почему он неработает?

    [codebox]for ($i=0;$i<10;$i++)
    {
    for ($n=0;$n<100;$n++)
    {
    $d++;
    if $file_array1[$i] = $file_array2[$n]
    $var++
    }
    }[/codebox]

    В итоге должно получиться 1000 сравнений. Разультат одинаковых элементов - $var.
    Может есть другие варианты сравнения?

    А если надо выполнить 1mln сравнений скажем 6-8 байтовых строк на идентичность, на сколько это выполнимо на пхп и за какое примерно время выполнит сравнение пхп скрипт скажем на 1Ghz процессоре?
     
  2. PHPMaster

    PHPMaster Гость

    Это тебе не Дельфи и не си

    А во-вторых - сравнение происходит не знаком "=", а знаком "=="
    Вот сейчас у тебя такой код:

    Если елементу $file_array1[$i] присвоить значение $file_array2[$n], то $var++

    )
     
  3. Wetzel

    Wetzel Гость

    Пытался сделать и как ты сказал, пытался даже написать ====, оператора жа 3 %)))))))))))), вот только всё неправильно. Подскажите что не так.

    И в моём и в твоём варианте выдаёт ошибку:
    syntax error, unexpected T_VARIABLE, expecting '
     
  4. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    if ($file_array1[$i] == $file_array2[$n]) {
    ....
    }
     
  5. Wetzel

    Wetzel Гость

    Тоже неправильно.

    Вот весь код.
    [codebox]<?php
    echo ("Start time: ");
    echo (date("H:i:s"));
    echo("<br>");


    $file_array1 = file("c:\www\1.txt");
    $file_array2 = file("c:\www\2.txt");

    for ($i=0;$i<100;$i++)
    {
    for ($n=0;$n<10;$n++)
    {
    $d++
    If ($file_array1[$i] == $file_array2[$n])
    {
    $c++
    }
    }
    }


    echo("Сравнений:");
    echo $d;
    echo("<br>");
    echo("Совпадений:");
    echo $c;
    echo("<br>");
    echo ("End time: ");
    echo (date("H:i:s"));
    ?>[/codebox]

    Выдаёт ошибку:
    Parse error: syntax error, unexpected T_IF in C:\Documents and Settings\Admin\Local Settings\Temp\prev5~.php on line 15

    Так как будет правильно?
     
  6. nws

    nws Гость

    $d++;
    $c++;
     
  7. Wetzel

    Wetzel Гость

    Огромное спасиба nws, Kmet и PHPMaster.

    Проблема была решена.

    Вот результаты работы. На примерно 1Ghz процессоре. Компилятор Rapid PHP.

    Start time: 06:32:02
    Сравнений: 871439400
    Совпадений: 22052
    End time: 07:08:06

    2 массива один почти 25000 другой почти 40000. Сравнивал моим кодом аж почти 40 мин.
    Как добиться большей скорости? Сравнивать строковыми функциями?
    Может компилятор не самый лучший?

    Вот мне надо допустим разобраться с 2 массивами, один на скажем на миллион элементов а другой на два миллиона элементов.
    Это он месяц будет только сравнивать?
     
  8. PHPMaster

    PHPMaster Гость

    Wetzel, обязательно на досуге подумаю и тебе сюда отвечу
     
  9. Wetzel

    Wetzel Гость

    Найти и удалить дубликаты из 2-х разных фаилов.
     
  10. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    можно попробовать стравнивать не строки, а их хеши. при правильном выборе хеш функции на больших файлах может дать значительное ускорение.
     
  11. nws

    nws Гость

    PHP это не тот язык на котором необходимо решать задачи подобного типа.
    Возьми ASM или С.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей