2012-02-04 6 views
2

文字列が現行の文字列に似ている場合は、文字列をエコーし​​ません。以前の文字列が現在の文字列に似ている場合はエコー文字列を返しません。

$strings = array("software","software","game","antivirus"); 

マイ差関数、

function ($val1,$val2) { 
similar_text($val1,$val2,$percent); 
if ($percent>83) { 
// should not echo. But don't know how to do. 
} 
} 

しかし、私は、私はそれをどのように行うことができますかわからないが、私たちの文字列があるとしましょう。私はそれがそれぞれのために使うべきだと思います。

+0

'$ percent'と' similar_text() 'はどこから来たのですか?しかし、83%を超えてエコーしたくない場合は、単純に '$ percent <= 83'に変更してください。 – lethalMango

+0

@lethalMango $ percentはphpのsimilar_text()関数によって自動的に生成されます。トピックを評価する前に、状況について奨学生を改訂してください。 – user198989

+0

私はあなたの問題を理解するために質問をしました。私が答えを知っていたら、私は自分自身に答えていたでしょう。トピックを評価したと仮定する前に、誰が評価しているかを確認してください。 – lethalMango

答えて

2

このような何か試してください:あなたは、それのいくつかの部分を理解してコメントを残して、私は明確にしていない場合は

$strings = array("software","software","game","antivirus"); 

$lastString = ''; 

foreach ($strings as $string) { 
    similar_text($lastString, $string, $percent); 
    if ($percent < 83) { 
     echo "$string<br />"; 
     $lastString = $string; 
    } 
} 

を。

編集:
私は条件内$lastString = $string;を移動しました。言葉の多くは非常に非常に異なっていてもsoftware彼らは前の単語とそれほど異ならないだけsoftwareを印刷し、ループの外に$lastString割り当てを残し
$strings = array("software","sofware","sofwart","ofwart","fwart","wart","warts");

は、以下の文字列のリストを考えてみましょう。実際に内側に移動

は出力が得られます。

ソフトウェア
sofwart
いぼ

+0

実際、これらの文字列は単なる例に過ぎませんでした。私はこれを文章に使用します。 – user198989

1
$strings = array("software","software","game","antivirus"); 
$previous = ''; 
foreach ($strings as $string) { 
    if ($string===$previous) { 
    continue; 
    } else { 
    echo $string; 
    $previous = $string; 
    } 
} 

しかし、私は(それがあるべきことは、このようなためにそれを行う方が良いと思います速い):

$strings = array("software","software","game","antivirus"); 
$num = count($strings); 
for ($i=0;$i<$num;$i++) { 
    if ($strings[$i]===$strings[$i-1] && $i!==0) { 
    continue; 
    } else { 
    echo $strings[$i]; 
    } 
} 

はところで、私は完全に

+0

なぜ 'if(cond){continue; } '' if(!cond) 'を実行することができます。また、尋ねられるものではない正確なマッチだけに対応します。 – Leigh

+0

@madxpol $ percentはphpのsimilar_text()関数によって生成された類似性のパーセンテージです。 – user198989

1

array_filter()を使用してのアプローチ.. $パーセントが何を意味するかを取得did't(> = 5.3を想定):

$strings = array('software', 'software', 'game', 'antivirus'); 

$filtered = array_filter($strings, function($curr) { 

    static $prev; 

    similar_text($prev, $curr, $percent); 
    $prev = $curr; 

    if ($percent < 83) { 
     return $curr; 
    }   
}); 

print_r($filtered); 

収量:

Array 
(
    [0] => software 
    [2] => game 
    [3] => antivirus 
) 

希望これを助けてください。実際には、私は今までsimilar_text()について知りませんでした。かなり興味深い機能。ありがとう:)

+0

ありがとうDarragh。リーのスクリプトは私にとってうまくいった。しかし、私はあなたも試してみます。これが動作すれば、私はテストし、最も速いものを使用します。 – user198989

+1

ha。はい、私はちょうど私が投稿したときにリーのマークされた答えとして表示された!実際、array_ *関数の中には速度が遅いので、彼の方が速くなると思っています。 –

関連する問題