0

我知道有很多关于替换字符串中的内容的教程和问题。

但我找不到一个关于我想做的事!

假设我有一个这样的字符串

$string="Hi! [num:0]";

还有一个像这样的示例数组

$array=array();
$array[0]=array('name'=>"na");
$array[1]=array('name'=>"nam");

现在我想要的是 PHP 应该首先搜索模式,比如[num:x]wherex是数组中的有效键。然后用数组的匹配键替换它。例如,上面给出的字符串应该变成:Hi! na

我正在考虑这样做:

  1. 搜索模式。
  2. 如果找到,调用一个函数来检查该号码是否有效。
  3. 如果有效,则从该键的数组中返回名称,例如 0 或 1 等。
  4. PHP 将字符串中函数返回的值替换为模式。

但我找不到执行这个想法的方法。如何匹配该模式并为每次匹配调用该函数?

这正是我想做的方式。任何其他方法也可以。

如果您对我的问题有任何疑问,请在评论中提问。

4

2 回答 2

1

尝试这个

$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);
于 2012-07-10T07:24:54.700 回答
0

如果您不想要正则表达式的开销,并且您的字符串格式保持不变;你可以使用:

<?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

?>

直播:http://codepad.viper-7.com/qy2uwW

假设:

  • $string 总是只有一个空格,正好在之前[num:X]
  • [num:X]始终采用相同的格式。

当然,如果您可以将输入设置为简单
Hi! 0 Hello! 10

于 2012-07-10T09:16:51.063 回答