• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы Wetzel
  • Дата начала
Статус
Закрыто для дальнейших ответов.
W

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 процессоре?
 
P

PHPMaster

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

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

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

)
 
W

Wetzel

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

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

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

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

Wetzel

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

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

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

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

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

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

PHPMaster

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

Wetzel

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

Kmet

Well-known member
25.05.2006
904
8
BIT
0
можно попробовать стравнивать не строки, а их хеши. при правильном выборе хеш функции на больших файлах может дать значительное ускорение.
 
N

nws

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!