次のコードは、文字列を分割し、3文字以上の英数字をすべて選択します。しかし、文字列からすべての単語を取得するのではなく、最初の3つの有効な単語しか取得しませんが、問題はループにあります。文字列から3つの有効な単語が見つかると、すぐにループを止めることができます。PHP文字列から最初の3ワードを取得する
PS。同じことに対する別のアプローチがある場合は、お勧めします。おかげさまで
次のコードは、文字列を分割し、3文字以上の英数字をすべて選択します。しかし、文字列からすべての単語を取得するのではなく、最初の3つの有効な単語しか取得しませんが、問題はループにあります。文字列から3つの有効な単語が見つかると、すぐにループを止めることができます。PHP文字列から最初の3ワードを取得する
PS。同じことに対する別のアプローチがある場合は、お勧めします。おかげさまで
一致するキーワードが見つかるとカウントアップする変数を追加します。カウンタが最大値に達したとき、私はあなたが「ブレーク」のキーワードが必要だと思う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;
}
}
を破る、(コードがテストされていない)、これを試す -
$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;
}
}
をちょうど残りを遮断します。
array_splice($arr, 3);
あなたの結果を確認するために正規表現を使用するとして、私はあなたのために仕事をするために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);
。必要に応じて正規表現を変更します。
注:元のテストと同じように単語をユニークにしました。
ありがとう、これは素晴らしいですが、私はいくつかの質問があります。まず、最後の行 'Notice:Array to string conversion'で警告を出します。次に、私のコードを見ると、array_uniqueを使ってユニークな単語を取得します。あなたは例を修正して、最初の3単語を上記の文字列から得ることができますか?0-9a-Zのみを含む最小長3を教えてください。 – Roman
通知はオンラインスクリプトによるもので、 'preg_match_all'は多次元配列を返し、キーワードは$ arr [0]配列にあり、$ arr配列にはありません。配列を取得したら、あなたの配列に似ていますが、あまりにも短すぎる単語は除外されています。あなたはちょうど最初の3つを取ることができます – Eineki
[a - z]は、期待できるもの、つまり[a-zA-Z] – Eineki
明白なエラーのために私の答えを削除しました、おかげでrabudde。 – Yoshi
代わりに条件を使用すると、よりシンプルにすることができます。例:if($ i <3) –
@SaeedAfzalこれは、if配列に '$ i <3'を含めるようには意味がありません。なぜなら、配列全体を処理しなければならない' foreach'ループを壊さないからです。 – rabudde