2017-12-21 22 views
0

私は同じような文字列を持っています$text = '1234567812349101';繰り返し文字を何回出力することができるようにしたいのですか?文字列に重複した文字を出力するにはどうすればよいですか?

$text = '1234567812349101'; 

$disp = str_split($text, 4); 

foreach ($disp as $char) { 

    if (preg_match('/(.{4,})\\1{2,}/', $char)) { 
     echo "This string $char is repeated. Repeated times."; 
    } 
} 

をしかし、何も出力はありません。たとえば、期待される結果は、私が試したThis string 1234 is repeated. Repeated 1 times.

でなければなりません。

どうすればいいですか?

+4

発生があることを持っていますか不均一に分割され、重複する4文字のチャンク文字列 '123451234 'に繰り返し文字が表示されていますか? – iainn

答えて

3

array_count_valuesを使用してみてください:

$text = '1234567812349101'; 

$disp = str_split($text, 4); 

$dupes = array_filter(array_count_values($disp), function ($el) { 
    return ($el > 1); 
}); 

foreach ($dupes as $dupe => $times) { 
    echo "This string $dupe is repeated. Repeated " . ($times - 1) . " times.\n"; 
} 

出力:

This string 1234 is repeated. Repeated 1 times. 

eval.in demo

+0

@David これはかなりいいですが、私はこの機能を使わずに自分のコードを編集できますか? $ text = '1234567812349101'; $ disp = str_split($ text、4); foreach($ disp as $ char){ //ここに達成コード – solink

0
$text = '1234567812349101'; 

    $disp = str_split($text, 4); 
    $count = 0; 
    foreach($disp as $char){ 

     if(strcmp("1234",$char)){ 
      $count++; 
     } 
    } 
    $cnt = $count-1; 
    if($cnt > 1){ 
    echo "1234 String is repeated. Repeated ".$cnt."times"; 
    } 

私はこれはあなたを助けることを願っています:)

+0

はい、あなたは1234を比較したいですか?またはこの文字列からの任意の文字列?? –

+0

@solink 'foreachの($ charとしての$ DISP){ 場合(のstrcmp($のDISP [0]、$の文字)){ $回数++ その後、あなたはそれがよりダイナミックにしたい場合は、 } } $ cnt = $ count-1; if($ cnt> 1){ echo "1234文字列が繰り返されます。" "$ cnt。" times; } ' –

関連する問題