note 83000 added to function.sprintf

From: Date: Tue, 06 May 2008 09:54:22 +0000
Subject: note 83000 added to function.sprintf
Groups: php.notes 
Request: Send a blank email to php-notes+get-139089@lists.php.net to get a copy of this message
一段用于替换字符串中指定的key的代码 --飞扬轻狂 2008年5月6日 (二) 02:32 (PDT) <?php $str=mapKeys($formatstr,$maps); $str="replace this template string ! the key maps is here key1=>{key1},key{{2=>{key{2},key3}=>{key3{}}"; echo mapKeys($str ,array("key1"=>"value 1" ,"key{2"=>"value 2" ,"key3}"=>"value 3" ) ); echo "\n" ?> output>> replace this template string ! the key maps is here key1=>value 1,key{2=>value 2,key3}=>value 3 $ php -r 'highlight_file("test.php");' <?php /** test */ $str="replace this template string ! the key maps is here key1=>{key1},key{{2=>{key{2},key3}=>{key3{}}"; echo mapKeys($str ,array("key1"=>"value 1" ,"key{2"=>"value 2" ,"key3}"=>"value 3" ) ); echo "\n"; $str="abc{key}{}}%{%{}%%%}% {{%{0{}%%,%%%,{key},%%,%%{key,2} ,%%{key,2},%$$%%{,%,"; echo mapKeys($str,array("key"=>"[the abc value]" ,"key,2"=>"[the %value% 2]")); echo "\n"; $str="abc%%%%%%%%%,%%% ,%key%,%%,%%%key,2%,%,%$$%%,%,"; echo mapKeys($str,array("key"=>"[the abc value]" ,"key,2"=>"[the %value% 2]"),"|%|"); echo "\n"; //end test*/ /* $ php test.php output>> replace this template string ! the key maps is here key1=>value 1,key{2=>value 2,key3}=>value 3 abc[the abc value]}}%[%}%%%]%{%[0}%%,%%% ,{key],%%,%%[the %value% 2],%%[the %value% 2] ,%$$%%{,%, abc%%%%%%%%%,%%%,%key%,%%,%%%key,2% ,%,%$$%%,%, */ /** * 使用maps中定义的value替换对应其key的 由开始标记字符和结束标记字符包含的字符串 * * 当标记对外开始标记后跟着开始标记时或 结束标记时表示第一个开始标记为转义符 * 当标记对内开始标记后跟着结束标记时表示 第一个开始标记为转义符 * 末尾没有匹配的开始标记将原样输出 */ function mapKeys($str,$maps,$fstart=null,$fend=null){ if(!$fstart){ $fstart="{"; $fend="}"; } if(!$fend){ $fend=$fstart; } // 如果标记相同则使用mapKeysBase进行替换 if($fstart==$fend){return mapKeysBase($str,$maps,$fstart);} $index=0; $offset=0; while(false!==($index=strpos($str,$fstart,$offset))){ # 找到开始标记,处理开始标记之前的数据 $v=substr($str,$offset,$index-$offset); $offset=$index+strlen($fstart); $p=true; while(($find=substr($str,$offset,strlen($fstart)))==$fstart ||($find=substr($str,$offset,strlen($fend)))==$fend){ $v.=$find; $offset=$offset+strlen($find); $p=false;# 如果这个标记是用来转义的 if(false!==($index=strpos($str,$fstart,$offset))){ $v.=substr($str,$offset,$index-$offset); $offset=$index+strlen($fstart); $p=true;# 查找下一个开始标记 } } $o.=$v; $v=""; # 标记了开始 并找到了 结束 while($p &&false!==($end=strpos($str,$fend,$offset))){ $v.=substr($str,$offset,$end-$offset); # 如果这个标记是被转义的 if(($find=substr($str,$end-strlen($fend),strlen($fstart))) ==$fstart){ $v=substr($v,0,strlen($v)-strlen($fstart)).$fend; $offset=$end+strlen($fend); continue; } $p=false; } if($v){ if(array_key_exists($v,$maps)){ $v=$maps[$v]; }else{ $v="[".$v."]"; } $o.=$v; $offset=$end+strlen($fend); } } if($p){ $o.=$fstart; } $v=substr($str,$offset); $o.=$v; return $o; } ?> http://www.fallseir.com/wiki/PHP/MapKeys.html ---- Server IP: 221.194.139.225 Probable Submitter: 218.249.153.228 ---- Manual Page -- http://www.php.net/manual/en/function.sprintf.php Edit -- https://master.php.net/note/edit/83000 Del: integrated -- https://master.php.net/note/delete/83000/integrated Del: useless -- https://master.php.net/note/delete/83000/useless Del: bad code -- https://master.php.net/note/delete/83000/bad+code Del: spam -- https://master.php.net/note/delete/83000/spam Del: non-english -- https://master.php.net/note/delete/83000/non-english Del: in docs -- https://master.php.net/note/delete/83000/in+docs Del: other reasons-- https://master.php.net/note/delete/83000 Reject -- https://master.php.net/note/reject/83000 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#139089) next »