2017-03-13 25 views
2

私はアルファベットの配列を見つけて最後と最初の組み合わせをフェッチする配列を持っています。私はこのようなことをしようとしています。配列の最初と最後の一致する配列を見つける

$aarr = ['x','y','z','t','m','n','x','y','z']; 
$str = implode('',$aarr); 
$all_subset = powerSet($aarr); 
foreach ($all_subset as $set) { 
    $sre_temp = implode('', $set); 
    $tru = hasOrderedCharactersForward($sre_temp); 
    if($tru){ 
    echo $sre_temp.'<br>'; 
    } 
} 

function powerSet($array) { 
    // add the empty set 
    $results = array(array()); 

    foreach ($array as $element) { 
     foreach ($results as $combination) { 
      $results[] = array_merge(array($element), $combination); 
     } 
    } 

    return $results; 
} 
function hasOrderedCharactersForward($str, $i = 2) { 
     $alpha = 'abcdefghijklmnopqrstuvwxyz'; 
     $len = strlen($str); 

     for($j=0; $j <= $len - $i; $j++){ 
      if(strrpos($alpha, substr($str, $j, $i)) !== false){ 
       return true; 
      } 
     } 

     return false; 
} 

私はpowerSet()は、私が思うように動作していないと思います。たとえそれが「xyz」を組み合わせとして表示しなければならないが、そうではない。

+0

この例では最初と最後に 'xyz'を結果として使用しますか? – JustOnUnderMillions

答えて

1

これを見て、必要に応じて使いましょう。

$aarr = ['x','y','z','t','m','n','x','y','z']; 
$subsets = []; 
$i=0; 
#here we merge all chars to sub-sequence 
foreach($aarr as $k=>$v){ 
    $subsets[$i][]=$v; 
    if(isset($aarr[$k+1]) && ord($v)+1!==ord($aarr[$k+1])){ 
     $i++; 
    } 
} 
$subsets = array_map(function($a){ return implode('',$a);},$subsets); 
print_r($subsets); 

結果:

アレイ([0] => XYZ [1] => T [2] => MN [3] => XYZ)

取得最初と最後の値:

#get first 
$first=null; 
$i=0; 
do{ 
    if(strlen($subsets[$i])>1){#find sequence 
     $first = $subsets[$i]; 
    } 
    $i++; 
}while(!$first && isset($subsets[$i])); 
#get last 
$last=null; 
$i=count($subsets)-1; 
do{ 
    if(strlen($subsets[$i])>1){#find sequence 
     $last = $subsets[$i]; 
    } 
    $i--; 
}while(!$last && isset($subsets[$i])); 
print "$first, $last"; 

結果:

xyz、xyz

+0

なぜそれがありません –

+1

@Adeel Gill結果では、次の文字はすべて1つの文字列にマージされ、 't'は後続の文字を持たないので、そのまま残されます。私は何も削除していない、私はマージできるものをマージします。次のステップは、最初と最後を取得します。 – JustOnUnderMillions

+0

あなたのポイントを得てansは素敵に見えます。 –

関連する問題