3
<?php 
$utf8_string = 'مع السلامة مع السلامة مع السلامة مع السلامة مع السلامة مع السلامة مع السلامة السلامة الرائعة على الطويلة ';
echo $utf8_string;
echo'<br/><br/>';

$patterns = array("على", "مع");
$replacements   = array("", "");

$r_string = str_replace($patterns, $replacements, $utf8_string);

//echo $r_string;
print_r ($r_string);
echo'<br/>';
//$words = preg_split( "/ ( |مع|على) /",$r_string);
$words = explode(" ",$r_string);

$num = count($words);
echo 'There are <strong>'.$num.'</strong> words.';
?>

アラビア語の文の単語数を数えるこのコードがありますが、一部の単語を削除して残りを数えたいのですが、str_replaceを使用しようとしましたが、この方法では元の文の単語数を数えています。誰かが私を助けることができますか?

4

3 に答える 3

4

あなたが使用することができます:

$num = count(
    explode(
        " ", 
        str_replace(
            $word, //Word you want to remove from your text.
            "",
            $string //String you want the word to be removed from.
        )
    )
);

あるいは:

$num = count(
    explode(
        " ", 
        str_replace(
            array("word1", "word2", [...]), //Words you want to remove from your text.
            "",
            $string //String you want the word to be removed from.
        )
    )
);

編集:指摘したように、上記は機能しません。エラーがどこにあるかを特定しようとしましたが、str_replaceアラビア文字は処理できますが、処理できないようですexplodePHPは、ASCII以外の文字では信頼できません。

あるいは、あなたができることは次のとおりです。

$num = Count(explode(" ", $utf8_string)) - Count(array_intersect(explode(" ", $utf8_string), $patterns))

必要な値を返す必要があります。

独自の文字列置換関数を作成することもできますが、配列を手動でループして各単語を比較する必要があるため、これに反対することをお勧めします。そうすることで、実行に時間がかかり、より冗長になります。


mbstringこれを処理する正しい方法は拡張機能(http://php.net/manual/en/book.mbstring.php )を使用することであるとyallに警告するためにここに来ます。上記の醜いハック/回避策ではなく、この拡張機能を使用してください。

于 2012-11-30T13:11:58.440 に答える
1

いくつかの単語を削除した後、explodeでスペースを数える前に、「重複するスペースを削除する」必要があります。文字列の前と端のスペースにはトリム(または同様の正規表現)が必要です

    $r_string = trim(preg_replace('/\s+/u',' ',$r_string));
于 2012-11-30T13:15:19.790 に答える
0

使用する$num = str_word_count($r_string);

それ以外の$num = count($words);

于 2012-11-30T13:21:52.110 に答える