文字列から完全な単語のみを取得する必要があります。つまり、完全な単語=4文字を超える単語です。文字列の例:
"hey hello man are you going to write some code"
次の場所に戻る必要があります。
"hello going write some code"
また、これらの単語をすべてトリミングして、単純な配列に配置する必要があります。
出来ますか?
正規表現を使用してそれを行うことができます。
preg_replace("/\b\S{1,3}\b/", "", $str);
次に、それらを。を使用して配列に入れることができますpreg_split()
。
preg_split("/\s+/", $str);
完全な要件に応じて、文字列配列を変更せずに使用する必要がある場合はexplode
、これを使用できます。次のようにすると、単語が配列になります。
$str = "hey hello man are you going to write some code";
$str_arr = explode(' ', $str);
次に、次array_filter
のように、不要な単語を削除するために使用できます。
function min4char($word) {
return strlen($word) >= 4;
}
$final_str_array = array_filter($str_arr, 'min4char');
それ以外の場合、変更されていない配列が必要ない場合は、正規表現を使用して、を使用して特定の長さを超えるすべての一致を取得するpreg_match_all
か、を使用しているものを置き換えることができpreg_replace
ます。
最後のオプションの1つは、基本的な方法で実行しexplode
、最初のコード例に従って配列を取得するために使用し、次にunset
配列からエントリを削除するためにを使用してすべてをループすることです。ただし、その後、インデックスを再作成する必要もあります(「fixed」配列のその後の使用状況によって異なります)。これは、配列の大きさによっては非効率になる可能性があります。
編集:それが機能しないという主張がある理由がわからない、出力については以下を参照してくださいvar_dump($final_str_array)
:
array(5) { [1]=> string(5) "hello" [5]=> string(5) "going" [7]=> string(5) "write" [8]=> string(4) "some" [9]=> string(4) "code" }
@OP、これを文字列に戻すには、単に呼び出しimplode(' ', $final_str_array)
てこの出力を取得できます。
hello going write some code
http://php.net/manual/fr/function.str-word-count.phpを使用しますstr_word_count()
str_word_count($str, 1)
単語のリストを返します。次に、n
を使用して文字よりも多い単語を数えます。strlen()
またはstr_word_count()
などの他のソリューションよりも使用することの大きな利点は、句読点を考慮して、単語の最終リストから破棄することです。preg_match
explode
まず、それらを配列に入れます。
$myArr = explode(' ', $myString);
次に、ループして、長さが4以上のものだけを新しい配列に割り当てます。
$finalArr = array();
foreach ($myArr as $val) {
if (strlen($val) > 3) {
$finalArr[] = $val;
}
}
もちろん、文字列にカンマやその他の特殊文字が含まれていると、注意が必要になりますが、基本的なデザインの場合、これにより正しい方向に進むことができると思います。
$strarray = explode(' ', $str);
$new_str = '';
foreach($strarray as $word){
if(strlen($word) >= 4)
$new_str .= ' '.$word;
}
echo $new_str;
ループ、ネストされた関数呼び出し、一時的な配列は必要ありません。たった1つの関数呼び出しと非常に単純な正規表現。
$string = "hey hello man are you going to write some code";
preg_match_all('/\S{4,}/', $string, $matches);
//Printing Values
print_r($matches[0]);
<?php
$word = "hey hello man are you going to write some code";
$words = explode(' ', $word);
$new_word;
foreach($words as $ws)
{
if(strlen($ws) > 4)
{
$new_word[] = $ws;
}
}
echo "<pre>"; print_r($new_word);
?>
これを実現するには、explode()およびarray_filter()をtrim()+ strlen()とともに使用できます。行き詰まっている場合は、試してコードを投稿してください。