[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: похожесть массивов на php
cheaterok
может правда слабо искал но всё же..

как можно сравнить два массива на похожесть (не на соответствие а на похожесть!)

к примеру 1234 и 85123454 и вернуть 1234

или польз и пользователи и вернуть польз?

зы: приветствуется оптимальность ато массивы оочень большие, 1000+ значений в каждом wink.gif



Спустя 14 минут, 1 секунда (28.07.2011 - 22:12) Invis1ble написал(а):
cheaterok
ты показал пример сравнения двух строк, а где массивы, собственно? И на каком основании должен выноситься вердикт, что массивы "похожи" ?

Спустя 5 минут, 5 секунд (28.07.2011 - 22:18) alex12060 написал(а):
Invis1ble

Видимо такая логика - массивы схожи, если в паре массив1[значение] == массив2[значение], и при удаче вернуть массив1[значение]

Спустя 2 минуты, 32 секунды (28.07.2011 - 22:20) Invis1ble написал(а):
cheaterok
Свои мысли имеются? Или халяву ищешь? smile.gif

Спустя 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


да и скорость выполнения желает лучшего

Спустя 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 написал(а):
НО! есть одно Но! это работает если сравниваются слова на предмет одинаковости начала, ("компьют" и "компьютерные"), а что если вначале есть префикс, к примеру "суперкомпьютер" и тп..?

надо думать.. dry.gif

Спустя 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";}
}
}

?>


результат:

компьют программ 


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.