как можно сравнить два массива на похожесть (не на соответствие а на похожесть!)
к примеру 1234 и 85123454 и вернуть 1234
или польз и пользователи и вернуть польз?
зы: приветствуется оптимальность ато массивы оочень большие, 1000+ значений в каждом
Спустя 14 минут, 1 секунда (28.07.2011 - 22:12) Invis1ble написал(а):
cheaterok
ты показал пример сравнения двух строк, а где массивы, собственно? И на каком основании должен выноситься вердикт, что массивы "похожи" ?
ты показал пример сравнения двух строк, а где массивы, собственно? И на каком основании должен выноситься вердикт, что массивы "похожи" ?
Спустя 5 минут, 5 секунд (28.07.2011 - 22:18) alex12060 написал(а):
Invis1ble
Видимо такая логика - массивы схожи, если в паре массив1[значение] == массив2[значение], и при удаче вернуть массив1[значение]
Видимо такая логика - массивы схожи, если в паре массив1[значение] == массив2[значение], и при удаче вернуть массив1[значение]
Спустя 2 минуты, 32 секунды (28.07.2011 - 22:20) Invis1ble написал(а):
cheaterok
Свои мысли имеются? Или халяву ищешь?
Свои мысли имеются? Или халяву ищешь?
Спустя 20 секунд (28.07.2011 - 22:20) Winston написал(а):
Может вам array_udiff поможет ?
Спустя 1 час, 51 минута, 39 секунд (29.07.2011 - 00:12) cheaterok написал(а):
спасибо alex12060! в точку!
массив1[значение] == массив2[значение]
к примеру:
$массив1("компьют", "программ", "биол");
$массив2("компьютерные", "программы", "упрощают", "жизнь", "но", "не", "программистам");
если все символы элемента из массива1 равны соответствующей последовательности символов в элементе массива2 вернуть этот элемент из массива1..
все функции по работе с массивами сравнивают только на предмет точного соответствия..
нашел пример со строками:
<?
$str1 = "Hello, world!";
$str2 = "Hello!";
$var = similar_text($str1,$str2);
$var1 = similar_text($str1, $str2, &$tmp);
// параметр $tmp передаем по ссылке
echo("Результат выполнения функции similar_text()
для строк $str и $str1 в количестве символов:");
echo("<br>"); echo("$var"); echo("<br>");
echo("и в процентах:"); echo("<br>");
echo($tmp); // для вывода информации в процентах обращаемся к $tmp
?>
но эта функция возвращает только количество совпадений и процент совпадений, то есть результат будет следующим:
Результат выполнения функции similar_text() для строк Hello, world! и Hello! в количестве символов:
6
и в процентах:
63.157894736842
да и скорость выполнения желает лучшего
массив1[значение] == массив2[значение]
к примеру:
$массив1("компьют", "программ", "биол");
$массив2("компьютерные", "программы", "упрощают", "жизнь", "но", "не", "программистам");
если все символы элемента из массива1 равны соответствующей последовательности символов в элементе массива2 вернуть этот элемент из массива1..
все функции по работе с массивами сравнивают только на предмет точного соответствия..
нашел пример со строками:
<?
$str1 = "Hello, world!";
$str2 = "Hello!";
$var = similar_text($str1,$str2);
$var1 = similar_text($str1, $str2, &$tmp);
// параметр $tmp передаем по ссылке
echo("Результат выполнения функции similar_text()
для строк $str и $str1 в количестве символов:");
echo("<br>"); echo("$var"); echo("<br>");
echo("и в процентах:"); echo("<br>");
echo($tmp); // для вывода информации в процентах обращаемся к $tmp
?>
но эта функция возвращает только количество совпадений и процент совпадений, то есть результат будет следующим:
Результат выполнения функции similar_text() для строк Hello, world! и Hello! в количестве символов:
6
и в процентах:
63.157894736842
да и скорость выполнения желает лучшего
Спустя 36 минут, 18 секунд (29.07.2011 - 00:48) Invis1ble написал(а):
примерно так
function getApproxIntersection($array1, $array2) {
$c = count($array1);
$result = array();
for ($i = 0; $i < $c; $i ++)
if (strstr($array2[$i], $array1[$i]))
$result[] = $array1[$i];
return $result;
}
Спустя 3 часа, 40 минут, 10 секунд (29.07.2011 - 04:28) cheaterok написал(а):
спасибо всем за отзывы!
получилось следующим образом:
результат:
теперь можно будет запихнуть в функцию и красиво всё обработать)))
получилось следующим образом:
<?
$array1=array("компьют","биол","программ");
$array2=array("компьютерные","программы","упрощают","жизнь","но","не","программистам");
$c = count($array2);
$b = count($array1);
for ($i=0;$i<=$b; $i++){
for ($j=0;$j<=$c; $j++){
$domain=stristr($array2[$i],$array1[$j]);
if ($domain==$array2[$i]) {
$domain1=$array1[$j];
echo "$domain1 \n"; }
}
}
?>
результат:
компьют
программ
теперь можно будет запихнуть в функцию и красиво всё обработать)))
Спустя 9 минут, 36 секунд (29.07.2011 - 04:38) cheaterok написал(а):
НО! есть одно Но! это работает если сравниваются слова на предмет одинаковости начала, ("компьют" и "компьютерные"), а что если вначале есть префикс, к примеру "суперкомпьютер" и тп..?
надо думать..
надо думать..
Спустя 31 минута, 56 секунд (29.07.2011 - 05:10) cheaterok написал(а):
вот решение:
результат:
<?
$array1=array("компьют","биол","программ");
$array2=array("суперкомпьютерные","программы","упрощают","жизнь","но","не","программистам");
$c = count($array2);
$b = count($array1);
for ($i=0;$i<=$b; $i++){
for ($j=0;$j<=$c; $j++){
$pos = strpos($array2[$i], $array1[$j]);
if ($pos === false) {} else
{ $domain1=$array1[$j];
echo "$domain1 \n";}
}
}
?>
результат:
компьют программ