Всем добрый день! У меня есть следующий код для замены текста:
$string = "raptor editor является редактором с открытым исходным кодом javascript wysiwyg html editor.";
$search = array("raptor editor","editor","javascript wysiwyg html editor","wysiwyg","html");
$replace = array("tinymce editor","false","jquery wysiwyg html editor","false","false");
$str = strtr($string,array_combine($search, $replace));
echo $str;
Ответ:
tinymce editor является редактором с открытым исходным кодом jquery wysiwyg html editor.
Нужно сделать так чтобы этот код заменял текст в правильный вариант в
любом регистре. Например если переменная $string равно:
$string = "RAPTOR editor является редактором с открытым исходным кодом javascript wysiwyg html editor.";
$search = array("raptor editor","editor","javascript wysiwyg html editor","wysiwyg","html");
$replace = array("tinymce editor","false","jquery wysiwyg html editor","false","false");
$str = strtr($string,array_combine($search, $replace));
echo $str;
Ответ:
RAPTOR false является редактором с открытым исходным кодом jquery wysiwyg html editor Ответ должно быть:
TINYMCE editor является редактором с открытым исходным кодом jquery wysiwyg html editor.
И так далее... Массиве все слова для поиска и замены будут в нижнем регистре.
У меня есть свой код который заменяет все слова в точном регистре. Но он заменяет не так как нужно, хотя регистр он сохраняет. Вот этот код:
function repl($string, $dict)
{
$string = preg_replace_callback("/\pL+/u", function ($m) use ($dict) {
$word = mb_strtolower($m[0]);
if (isset($dict[$word])) {
$repl = $dict[$word];
if ($word === $m[0]) return $repl;
if (mb_strtoupper($word) === $m[0]) return mb_strtoupper($repl);
if (mb_convert_case($word, MB_CASE_TITLE) === $m[0]) return mb_convert_case($repl, MB_CASE_TITLE);
for ($i = 0, $len = mb_strlen($word); $i < $len; ++$i) {
$mixed[] = mb_substr($word, $i, 1) === mb_substr($m[0], $i, 1)
? mb_substr($repl, $i, 1)
: mb_strtoupper(mb_substr($repl, $i, 1));
}
return implode("", $mixed);
}
return $m[0];
}, $string);
return $string;
}
$dict = array
(
"raptor editor" => "tinymce editor",
"editor" => "false",
"javascript wysiwyg html editor" => "jquery wysiwyg html editor",
"wysiwyg" => "false",
"html" => "false"
);
$string_1 = "Raptor Editor является редактором с открытым исходным кодом JavaScript WYSIWYG HTML editor.";
$string_2 = "raptor editor является редактором с открытым исходным кодом javascript wysiwyg html editor.";
$string_3 = "RaPTor EDitOr является редактором с открытым исходным кодом JAVAscript wYsIwYg HTML editor.";
// Тестирование скрипта:
echo repl($string_1, $dict);
// Raptor False является редактором с открытым исходным кодом JavaScript FALSE FALSE false.
echo repl($string_2, $dict);
// raptor false является редактором с открытым исходным кодом javascript false false false.
echo repl($string_3, $dict);
// RaPTor FAlsE является редактором с открытым исходным кодом JAVAscript fAlSe FALSE false.
В этом скрипте попадает
false, поэтому нужно или сделать так, чтобы была правильная замена без
false или переделать первого скрипта
регистронезависимый. И главное я работаю с
миллионами данных в массиве а здесь важно
скорость работы скрипта. Второй скрипт "
repl()" очень скоростная но у него проблемы. Может у кого то есть какие то варианты. Спасибо всем за ранее.