带功能开关错误的preg_replace(?)

时间:2013-04-12 07:51:57

标签: php preg-replace

我正在尝试编写类似BB-Code函数的东西,它取代了例如。 “[itemThumb type = file itemId = 33]”,带有所选项目的缩略图。

为此我在uniText()中使用preg_replace:

function universeText($str){

    $str = preg_replace("#\[itemThumb type=(.*)\ typeId=(.*)\]#", showChatThumb("$1","$2") , $str);
return $str;


}

因为showChatThumb的输出无效,我将showChatThumb()缩减为:

function showChatThumb($itemType, $itemId){
switch($itemType){

   case 'file':
       $return = "rofl";
   break;
   case 'folder':
       $return = "lol";
   break;
   case 'link':
       $return = "asd";
   break;
return $return;
}

但是switch()函数在某种程度上不适用于变量$ itemId。当我在switch函数之前或之后定义$ return时,它会直接传递replace函数。 我读到开关有时候不能正常工作,所以我也试过if,否则如果已经但它也不起作用。

但如果我这样写,那么返回正确的值也会抛出replace函数:

function showChatThumb($itemType, $itemId){
    return $itemType;
}

我现在非常无能为力,谢谢你的每一次帮助

1 个答案:

答案 0 :(得分:2)

尝试使用preg_replace_callback()

function universeText($str){
    echo $str = preg_replace_callback("#\[itemThumb type=(.*)\ itemId=(.*)\]#", 'showChatThumb' , $str);
}
$str = "[itemThumb type=file itemId=33]";
function showChatThumb($param){

    switch($param[1]){

      case 'file':
         $return = "rofl";
      break;
      case 'folder':
         $return = "lol";
      break;
      case 'link':
            $return = "asd";
      break;

    }
    return $return;
}
$tes = universeText($str);
echo "<pre>"; print_r($tes);