2017-04-18 30 views
0

我已经比较了一个矩阵的数据,我已经统计了一个数组的数据,但是我从来没有数过,数组之间重复的按键序列是什么,我想在所有序列之间进行比较,并查找out这个部分的最大尺寸重复..我有数百个数字,我应该在它们之间进行比较,找出它们之间最大的重复延伸,一个序列中存在的最大重复尺寸,另一个存在于另一个大阵列的序列!如何比较大数组中的关键序列,找出最大数量的重复序列?

查找重复的单个元素可以简单地用in_array()完成。 array_keys()同样可以轻松地从不同数组中重复键。由于我们关注的是序列,而不是单一的值,所以它们对我们都没有帮助。

<?php 
header('Content-Type: text/html; charset=utf-8'); 
echo 'test - This is just for us to figure out, what is the size of the greatest duplication of stretches between the previous sequences'.'<br>'; 


$previous_results_manually_inserted = array(
array('12','21','34','1','51','87','42','49','37','119','101','7','111','17','11','19','2','15','6'), 
array('3','5','1','18','61','75','92','84','36','81','2','07','90','2','71','17','08','51','37'), 
array('81',75','92','84','36','81','2','07','90','2','17','65','44','73','27','30','41','74','88'), 
); 

foreach ($previous_results_manually_inserted as $previous) { 

     $match = preg_match("/.*$test.*/", $previous); 
}  

echo 'The largest repeated slice between these sequences is:'; 
echo implode(', ', $match), "<br>\n" 

输出:75' , '92', '84', '36', '81', '2', '07', '90', '2'

注:最终客观:最高的重复性是9个数字。 (在这个例子中)

谢谢大家。

+0

你想找到'$ previous_results_manually_inserted =阵列( 阵列复制('12' , '21', '34', '1', '51','87 ”,'42' , '49', '37', '119', '101', '7', '111', '17', '11', '19', '2', '15', '''','3','5','1','18','61','75','92','84','36','81','2' '','07','90','2','71','17','08','51','37'), 阵列('81',75','92',' 84' , '36', '81', '2', '07', '90', '2', '17', '65', '44', '73', '27', '30' ,'41','74','88'), );' –

+0

'$ test'中包含了什么? 'preg_match'返回一个布尔值,对它应用'implode'是无稽之谈。 '$ match'在每次循环迭代中重新初始化。 – Toto

回答

0

该任务与查找最大常用字符串的算法非常相似。可以如下解决:

$arrs = [ 
['12','21','34','1','51','87','42','49','37','119','101','7','111','17','11','19','2','15','6'], 
['3','5','1','18','61','75','92','84','36','81','2','07','90','2','71','17','08','51','37'], 
['81','75','92','84','36','81','2','07','90','2','17','65','44','73','27','30','41','74','88'], 
]; 
$sequence = []; 
foreach($arrs as $offset => $item){ 
    $sarr = array_slice($arrs , $offset+1); 
    $count = count($item); 
    foreach($sarr as $arr){ 
     $str = join(',',$arr); 
     for($a = 0;$a<$count;$a++){ 
      for($b = 1;$b<$count;$b++){ 
       $needle = join(',',array_slice($item , $a , ($a + $b > $count ? $count : $b))); 
       if(strpos($str,$needle) !== false){ 
        $sequence[(substr_count($needle,','))] = $needle; 
       } 
      } 
     } 
    } 
} 
echo array_pop($sequence).PHP_EOL; 

//out : 75,92,84,36,81,2,07,90,2 
+0

非常感谢你! AmaaaaazinG! Thaaaaaanks很多! – hercules

+0

欢迎你) – Redr01d

相关问题