2017-04-18 11 views
0

私は既に行列のデータを比較していますが、配列のデータをすでに数えていますが、配列の間のキーの繰り返しシーケンスは何ですか、私はすべてのシーケンスを比較したいこのセクションの最大サイズを繰返します。私はそれらの間でそれらを比較しなければならない数百の数字を持っており、それらの間で最大の重複ストレッチ、シーケンス内に存在する最大の重複サイズ、大きな配列の配列!大きな配列からキー配列を比較して、重複配列の最大数を調べるにはどうすればいいですか?

繰り返す単一の要素を見つけることは、単に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で重複するものを見つけたいと思います「41」、「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')、 array( '81'、75 '、' 92 '、' 「78」、「36」、「81」、「2」、「07」、「90」、「2」、「17」、「65」、「44」、「73」、「27」、 、'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

関連する問題