получить процент сходства двух массивов в php

Мне нужно взять два массива и придумать процент сходства. то есть:

array( 0=>'1' , 1=>'2' , 2=>'6' , 3=>array(0=>1)) 

уегз

 array( 0=>'1' , 1=>'45' , 2=>'6' , 3=>array(0=>1)) 

Где я думаю, что% 75

или

 array( 0=>'1' , 1=>'2' , 2=>'6' , 3=>array(0=>'1')) 

уегз

 array( 0=>'1' , 1=>'2' , 2=>'6' , 3=>array(0=>'55')) 

Не знаете, как подойти к этому. Просто нужно закончить рабочий процент. Спасибо .

Solutions Collecting From Web of "получить процент сходства двух массивов в php"

Предполагая, что оба массива имеют одинаковую длину, вы можете перебирать и видеть, какие значения одинаковы для ключей, например:

 <?php $a = array(1,2,3,4); $b = array(1,2,4,4); $c = 0; foreach ($a as $k=>$v) { if ($v == $b[$k]) $c++; } echo ($c/count($a))*100; // outputs 75 ?> 

Или просто проверяйте, содержат ли они похожие элементы, используя in_array .

 <?php $a = array(1,2,3); $b = array(1,2,4); $c = 0; foreach ($a as $i) { if (in_array($i,$b)) $c++; } echo ($c/count($a))*100; // outputs 66.66... ?> 

Вот как я недавно занялся этой проблемой:

 $array1 = array('item1','item2','item3','item4','item5'); $array2 = array('item1','item4','item6','item7','item8','item9','item10'); // returns array containing only items that appear in both arrays $matches = array_intersect($array1,$array2); // calculate 'similarity' of array 2 to array 1 // if you want to calculate the inverse, the 'similarity' of array 1 // to array 2, replace $array1 with $array2 below $similarity = round(count($matches)/(count($array1)*100); echo 'SIMILARITY: ' . $similarity . '%'; // ie, SIMILARITY: 40% // (2 of 5 items in array1 have matches in array2 = 40%) 

Установите счетчик равным нулю.

Итерации через массив, проверяя, равна ли каждая пара элементов. Если они есть, увеличьте количество.

В конце, сходство – это счет, деленный на общее количество элементов в массивах.

Это предполагает, что массивы имеют одинаковую длину и имеют одинаковые ключи – определение «подобия» в противном случае затруднено.

Вы могли бы в первую очередь подсчитать количество общих предметов. Затем вам понадобится функция, которая сообщает вам, является ли один подэлемент тем же или нет (bool).

Затем вы проходите оба массива сразу и подсчитываете одинаковые совпадения. Чтобы получить процент, разделите количество одинаковых по общему счету с более раннего и умножьте результат на 100.

Вам нужно решить, как вы хотите иметь дело с элементами, которые существуют только в одном, но не в другом массиве. Кроме того, если вы хотите войти внутрь элементов, если они также являются массивом, вы можете сделать is_same($a, $b) рекурсивной и вернуть значение float (0-1, а не 0-100) и подсчитать эту долю вместо 0 FALSE или 1 TRUE.

Вот алгоритм для него.

 int count = 0; for(int i = 0; i < arraySize; i++) { if(array1[i] == array2[i]) { count++; } } float percent = ((count/arraySize)*100); 

count($array) даст вам общее количество элементов в массиве. Затем вы можете сравнить числа в массиве и иметь счетчик для всех тех, которые являются одинаковыми, и сделать [total number of same number/the count($array)] *100 . Это должно дать процент