我知道有很多关于替换字符串中的内容的教程和问题。
但我找不到一个关于我想做什么的答案!
假设我有一个类似的字符串
$string="Hi! [num:0]";
还有一个像这样的数组示例
$array=array();
$array[0]=array('name'=>"na");
$array[1]=array('name'=>"nam");
现在我想要的是PHP应该首先搜索像[num:x]
这样的模式,其中x
是数组中的有效键。然后将其替换为数组的匹配键。例如,上面给出的字符串应该变成:Hi! na
我想这样做:
- 搜索图案
- 如果找到,调用一个函数来检查号码是否有效
- 如果有效,则返回该键数组中的名称,如0或1等
- PHP会替换字符串中函数返回的值来代替模式
但我找不到执行这个想法的方法。如何匹配该模式并为每次匹配调用函数?
这正是我想做的。任何其他方法也会起作用。
如果你对我的问题有任何疑问,请在评论中提问。
试试这个
$string="Hi! [num:0]";
$array=array();
$array[0]=array('name'=>"na");
$array[1]=array('name'=>"nam");
echo preg_replace('#('!)?'s+'[num:('d+)']#ie','isset($array['2]) ? "'1 ".$array['2]["name"] : " "',$string);
如果您不想要Regex的开销,并且您的字符串格式保持不变;你可以使用:
<?php
$string="Hi! [num:0]";
echo_name($string); // Hi John
echo "<br />";
$string="Hello! [num:10]";
echo_name($string); // No names, only Hello
// Will echo Hi + Name
function echo_name($string){
$array=array();
$array[0]=array('name'=>"John");
$array[1]=array('name'=>"Doe");
$string = explode(" ", $string);
$string[1] = str_replace("[num:", "", $string[1]);
$string[1] = str_replace("]", "", $string[1]);
if(array_key_exists($string[1], $array)){
echo $string[0]." ".$array[$string[1]]["name"];
} else {
echo $string[0]." ";
}
}// function echo_sal ENDs
?>
Live:http://codepad.viper-7.com/qy2uwW
假设:
- $string总是只有一个空格,正好在
[num:X]
之前 [num:X]
总是采用相同的格式
当然,如果您可以将输入设置为简单的
,则可以跳过str_replace行Hi! 0
或Hello! 10