1

私はBBコード関数のようなものを書こうとしています。選択したアイテムのサムネイルを含む「[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;
}

しかし、変数 $itemId では、switch() 関数が正しく動作しません。switch 関数の前または後に $return を定義すると、replace 関数がスローされて渡されます。スイッチが正しく機能しない場合があることを読んだので、if、else if alreadyでも試しましたが、機能しません。

しかし、このように書くと、replace 関数をスローして正しい値も返されます。

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

私は今、真剣に無知です、すべての助けに感謝します

4

1 に答える 1

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);
于 2013-04-12T07:54:37.840 に答える