<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[preg_replace_callback结合create_function做一个新的sprintf函数.]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Wed, 30 Jan 2013 09:48:43 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	问题：<br/>问题讨论：<br/>一：[北京]PHPMAN&nbsp;&nbsp;14:52:14<br/>有没有一个比sprintf稍微强大点的替换函数？<br/>sprintf(&#039;select * from %s where %s=%s&#039;,这里是数组);<br/>----------------------------------------------------------------------------------------<br/>1）实现这个功能用到正则，这个函数可能是这样，数组长度不定怎么办？：<br/>学习正则并可以回调的函数preg_replace_callback:<br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
$text = &quot;April fools day is 04/01/2002&#92;n&quot;;
$text.= &quot;Last christmas was 12/24/2001&#92;n&quot;;

// 回调函数
function next_year($matches) &#123;
// 通常：$matches[0] 是完整的匹配项
// $matches[1] 是第一个括号中的子模式的匹配项
// 以此类推
return $matches[1].($matches[2]+1);
&#125;
echo preg_replace_callback(
&quot;&#124;(&#92;d&#123;2&#125;/&#92;d&#123;2&#125;/)(&#92;d&#123;4&#125;)&#124;&quot;,
&quot;next_year&quot;,
$text);
?&gt;
</textarea><br/><br/><br/>PHP的多个参数args,结合create_function生成一个函数来实现，<br/>再学习这个create_function：<br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
$newfunc = create_function(&#039;$a,$b&#039;, &#039;return &quot;ln($a) + ln($b) = &quot; . log($a * $b);&#039;);
echo &quot;New anonymous function: $newfunc&#92;n&quot;;
echo $newfunc(2, M_E) . &quot;&#92;n&quot;;
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?&gt;
</textarea><br/><br/>最后，结合上面两个函数成型如下新的函数，该问题得到解决：<br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
function printReg($str, $arr) &#123;
&nbsp;&nbsp;$GLOBALS[&#039;__func__arr__&#039;] = $arr;
&nbsp;&nbsp;&nbsp;&nbsp;$func = create_function(&#039;$args&#039;, &#039;return $GLOBALS[&quot;__func__arr__&quot;][$args[1]];&#039;);
&nbsp;&nbsp;echo preg_replace_callback(&#039;/%(&#92;w)/&#039;, $func, $str);
&#125;
printReg(&#039;select %0 from %1 where %2&#039;, Array(&#039;name&#039;, &#039;tablename&#039;, &#039;id = 1&#039;));
echo &quot;&lt;br&gt;&quot;;
printReg(&#039;select %a from %b where %c&#039;, Array(&#039;a&#039; =&gt; &#039;name&#039;, &#039;b&#039; =&gt; &#039;tablename&#039;, &#039;c&#039;=&gt; &#039;id = 2&#039;));
</textarea><br/><br/><br/><br/>中庸就是春江&nbsp;&nbsp;16:33:04<br/>在preg_replace_callback 中使用匿名函数，不知道怎么把变量$arr带过去，无奈使用$GLOBALS<br/>尽管可以有多方法，但这样写也是对新函数的了解，有说用数组函数，不用正则的：<br/>莫莫&lt;happy.yin@qq.com&gt;&nbsp;&nbsp;16:34:34<br/>用正则 还不如&nbsp;&nbsp;implode&nbsp;&nbsp;array_keys array_value&nbsp;&nbsp;组合 划算呢
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] preg_replace_callback结合create_function做一个新的sprintf函数.]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>