-1
$data = 'this is appLe and ApPle';
$search = 'apple';
//例に必要が$search
を使用してどのように多くの単語$search = array("apple","pear")
// $replace = array("pen","pupil")
PHP:この関数の配列バージョンを正しく作成する方法は?
$data = 'this is appLe and ApPle';
$search = 'apple';
//例に必要が$search
を使用してどのように多くの単語$search = array("apple","pear")
// $replace = array("pen","pupil")
PHP:この関数の配列バージョンを正しく作成する方法は?
$replace = 'pear';
の配列方法$検索に配列ワードを使用して$置き換えるために、この機能を変換しますか?$data = preg_replace_callback('/\b'.$search.'\b/i', function($matches) use ($replace)
{
$i=0;
return join('', array_map(function($char) use ($matches, &$i)
{
return ctype_lower($matches[0][$i++])?strtolower($char):strtoupper($char);
}, str_split($replace)));
}, $data);
場合、キーと値の配列を作成し、(任意の単語に一致するように、あるいは単純/\b\w+\b/
正規表現)大文字と小文字を区別しない方法で、単語全体としてキーと一致する動的パターンを構築するためにキーを使用してテストキーは配列内に存在します(!empty($arr[strtolower($matches[0])])
)。存在する場合は、見つかった一致値を使用します。
$data = 'this is appLe and ApPle and also a pEar here';
$search = array("apple","pear");
$replace = array("pen","pupil");
$arr = array_combine($search, $replace);
$pat = '/\b(?:' . implode("|", array_keys($arr)) . ')\b/i';
$data = preg_replace_callback($pat, function($matches) use ($arr)
{
$i=0;
return !empty($arr[strtolower($matches[0])]) ? join('', array_map(function($char) use ($matches, &$i)
{
return ctype_lower($matches[0][$i++])?strtolower($char):strtoupper($char);
}, str_split($arr[strtolower($matches[0])]))) : $matches[0];
}, $data);
echo $data; // => this is pen and PeN and also a pUpiL here
PHP demoを参照してください。
うまく動作しますが、問題が1つあります。** Pear **と入力すると、スクリプトが正しく動作しなくなり、応答として** PupiL **と** Pupil **が返されます。なぜこうなった?どのようにこれを修正することができますか?そして、このスクリプトは** Cyrillici **のような他のコーディングでも動作するようにする方法は? – Otabek
あなたは* this *の質問に配列サポートを追加するようにお願いしました。別の人がいる場合は、お気軽にお問い合わせください。しかし、ここではヒントがあります:Unicode文字列処理を有効にするには、正規表現に 'u '修飾子を追加してください。')/ \ b(?:implode(" | "、array_keys($ arr) b/iu '; ')、すべての' strto ... 'を' mb_strto ...'に置き換えます。 'ctype_lower'は' preg_match( '〜^ \ p {Ll} + \ z〜u'、$ m) 'で置き換えることもできます。 –
$ data = 'アレックスには家に猫がたくさんいます。'; $ search = array( "apple"、 "pear"、 "alex"); $ replace = array( "pen"、 "pupil"、 "александр"); $ search = array_map( "utf8_encode"、$ search); $ replace = array_map( "utf8_encode"、$ replace);$ arr = array_combine($ search、$ replace); $ arr = array_map( "utf8_encode"、$ arr); ' – Otabek