这是我目前的代码:
<?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将始终是随机的,所以找到它的位置有点难......
假设我写“这是一个随机数组”(它是在数组中),所以如果我们检查它的值,我们会看到它将是“converted1 RANDOM text”。
我已经测试过使用模式,还有explode();
和preg_replace_callback
,但对我来说没有任何作用。这真让我疯狂......
非常感谢你们。
答案 0 :(得分:0)
使用正则表达式。
<?php
$pattern = '~this is a ([^ ]*) array~U';
$replace = 'converted1 $1 text';
$text = preg_replace($pattern,$replace,$text);
您已经拥有了关联数组,您可以将关键字更改为正则表达式和值以替换字符串(使用上面的 $ 1 等转义组)。也可以在 foreach()中进行检查:
<?php
if (preg_match($k,$text)) {
// do the replacing here
}
注意:强> 我使用 [^] * 来匹配单个字词。它不仅是方式,它可能不是最好的方式。您也可以使用 \ w ,但我个人不喜欢它。)
修改强>
在这里,您可以使用现成的代码(仅在我的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);
}
}
?>