2011-07-25 22 views
0

次のコードは、文字列を分割し、3文字以上の英数字をすべて選択します。しかし、文字列からすべての単語を取得するのではなく、最初の3つの有効な単語しか取得しませんが、問題はループにあります。文字列から3つの有効な単語が見つかると、すぐにループを止めることができます。PHP文字列から最初の3ワードを取得する

PS。同じことに対する別のアプローチがある場合は、お勧めします。おかげさまで

答えて

3

一致するキーワードが見つかるとカウントアップする変数を追加します。カウンタが最大値に達したとき、私はあなたが「ブレーク」のキーワードが必要だと思うforeachループに

$string = "test test TEST test- -test _test blsdk.bldf,las"; 

$arr = preg_split('/[,\ \.;]/', $string); 
$keywords = array_unique($arr); 
$i=0; 
foreach ($keywords as $keyword){ 
      if ((preg_match("/^[a-z0-9]/", $keyword)) && (strlen($keyword) > 3)){ 
        echo $keyword; 
        echo "<br />"; 
        $i++; 
        if ($i==3) break; 
      } 
     } 
+0

明白なエラーのために私の答えを削除しました、おかげでrabudde。 – Yoshi

+0

代わりに条件を使用すると、よりシンプルにすることができます。例:if($ i <3) –

+0

@SaeedAfzalこれは、if配列に '$ i <3'を含めるようには意味がありません。なぜなら、配列全体を処理しなければならない' foreach'ループを壊さないからです。 – rabudde

1

を破る、(コードがテストされていない)、これを試す -

$string = "test test TEST test- -test _test blsdk.bldf,las"; 

$arr = preg_split('/[,\ \.;]/', $string); 
$keywords = array_unique($arr); 
$counter = 0; 
foreach ($keywords as $keyword){ 
      if ((preg_match("/^[a-z0-9]/", $keyword)) && (strlen($keyword) > 3)){ 
        echo $keyword; 
        echo "<br />"; 
        $counter = $counter + 1; 
        if ($counter == 3) break; 
      } 
     } 
1

をちょうど残りを遮断します。

array_splice($arr, 3); 
1

あなたの結果を確認するために正規表現を使用するとして、私はあなたのために仕事をするためにpreg_match_allを使用して、多分それは より明確に、そしておそらくefficientsある別のアプローチを使用します。あなたは 、3の最小の長さを持つ単語を選択しますが、あなたは> 3とその長さをテスト状態質問に

<?php 
$string = "test le test TEST test- -test _test blsdk.bldf,las"; 

$arr=array(); 
preg_match_all('/\b([0-9A-Za-z]{3,})\b/', $string, $arr); 
$keywords = array_slice(array_unique($arr[0]),0,3); 
echo join('<br/>', $keywords); 

。必要に応じて正規表現を変更します。

注:元のテストと同じように単語をユニークにしました。

+0

ありがとう、これは素晴らしいですが、私はいくつかの質問があります。まず、最後の行 'Notice:Array to string conversion'で警告を出します。次に、私のコードを見ると、array_uniqueを使ってユニークな単語を取得します。あなたは例を修正して、最初の3単語を上記の文字列から得ることができますか?0-9a-Zのみを含む最小長3を教えてください。 – Roman

+0

通知はオンラインスクリプトによるもので、 'preg_match_all'は多次元配列を返し、キーワードは$ arr [0]配列にあり、$ arr配列にはありません。配列を取得したら、あなたの配列に似ていますが、あまりにも短すぎる単語は除外されています。あなたはちょうど最初の3つを取ることができます – Eineki

+0

[a - z]は、期待できるもの、つまり[a-zA-Z] – Eineki

関連する問題