Ну, во-первых, позвольте мне сказать, прежде чем опубликовать это, я много раз тестировал, но в настоящее время я не знаю, что еще делать, потому что у меня ничего не работает.
Это код, который у меня есть в настоящее время:
<?php
// These are the arrays given by the application. All of them has an "%s" within.
// For example...
$arrs = array(
"this is a %s array" => "converted1 %s text",
"value %s test" => "converted2 %s text",
"test %s test" => "converted3 %s text");
$text = "This is a random text. Which can contains or not some of the expressions listed above. In this case it contains this: this is a magic array, value hey test, test php test";
// The output should be:
// "This is a random text. Which can contains or not some of the expressions listed above. In this case it contains this: CONVERTED magic TEXT, CONVERTED2 hey TEXT, CONVERTED3 php TEXT"
foreach($arrs as $k => $v){
// Seriously, I don't know what's next here... also I'm thinking this foreach is not right here.
}
?>
Основная цель, это написать что-то случайное в поле ввода текста. Поэтому я проверяю в текстовом поле, если некоторые из ключей массива ($arrs
), проблема в том, что я не могу обнаружить его с помощью strpos
% s всегда будет случайным, поэтому найти его немного сложнее …
Допустим, я пишу «это случайный массив» (он находится в массиве), поэтому, если мы проверим его значение, мы увидим, что это будет «convert1 RANDOM text».
Я проверил на использование шаблонов, а также с explode();
, а также preg_replace_callback
и у меня ничего не работает. Это действительно сводит меня с ума …
Спасибо большое, ребята.
Используйте регулярное выражение.
<?php
$pattern = '~this is a ([^ ]*) array~U';
$replace = 'converted1 $1 text';
$text = preg_replace($pattern,$replace,$text);
у вас уже есть ассоциированный массив, вы можете изменить ключи на регулярные выражения и значения для замены строк (с экранированной группой, например $ 1 выше). Также в пределах для каждого() Вы можете проверить сначала:
<?php
if (preg_match($k,$text)) {
// do the replacing here
}
Замечания:
Я использовал [^] * соответствовать одному слову. Это не единственный способ, это не может быть лучшим способом. Вы также можете использовать \ ш, но мне лично это не нравится 🙂
Редактировать:
Здесь вы идете с готовым кодом, который работает (только что проверил его на моем XAMPP)
<?php
$arrs = array(
"~this is a ([^ ]*) array~U" => "converted1 $1 text",
"~value ([^ ]*) test~U" => "converted2 $1 text",
"~test ([^ ]*) test~U" => "converted3 $1 text");
$text = "This is a random text. Which can contains or not some of the expressions listed above. In this case it contains this: this is a magic array, value hey test, test php test";
foreach($arrs as $k => $v){
if (preg_match($k,$text)) {
$text = preg_replace($k,$v,$text);
}
}
?>
Других решений пока нет …