Refactor
:my
=>
'code'
Codes
Refactorings
Popular
Best
Submit
Spam
Account
Logout
Login
JavaScript doesn't seem to be activated, expect things to be ugly and sloppy!
More Jobs
Recent
Cheap ruby block templating
Bindings on caller
Initial script execution very slow and skewing results
suppress ERB newlines
Keeping the database clean
Arrays, loops, strings...
Similar virtual attributes and their getters/setter
Check type is XML Serializable
Serena Collage slideshow
Shortest regular expression for matching a subdomain.
Popular
Caching Methods
How to find max, min of three numbers?
Similar virtual attributes and their getters/setter
Shortest regular expression for matching a subdomain.
Arrays, loops, strings...
Cheap ruby block templating
Check type is XML Serializable
Bindings on caller
Apache log file sorting
Tab-Switching in jQuery
Pastable version of
Rules Based Iterator
<div style="overflow:auto;border:solid 1px #ccc;background:#000;color:#F8F8F8"> <div class="section"> <pre style="float:left;margin:0 10px;border-right:0;color:#666;">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90</pre> <pre class="sunburst"><?php <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">/*</span></span> <span style="color:#AEAEAE;font-style:italic;"> * This is a test of a rules based iterative algorithm...</span> <span style="color:#AEAEAE;font-style:italic;"> *</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">*/</span></span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span> <span style="color:#E28964;">=</span> <span style="color:#DAD085;">array</span>()<span style="color:#E28964;">;</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">/*</span></span> <span style="color:#AEAEAE;font-style:italic;"> * type = # == numeric, @ = alpha</span> <span style="color:#AEAEAE;font-style:italic;"> * lower = lower boundary</span> <span style="color:#AEAEAE;font-style:italic;"> * upper = upper boundary</span> <span style="color:#AEAEAE;font-style:italic;"> *</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">*/</span></span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[] <span style="color:#E28964;">=</span> <span style="color:#DAD085;">array</span>(<span style="color:#65B042;"><span style="color:#65B042;">'</span>type<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#65B042;"><span style="color:#65B042;">'</span>#<span style="color:#65B042;">'</span></span>, <span style="color:#65B042;"><span style="color:#65B042;">'</span>lower<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#3387CC;">0</span>, <span style="color:#65B042;"><span style="color:#65B042;">'</span>upper<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#3387CC;">5</span>)<span style="color:#E28964;">;</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> If a rule is running over characters and it is case-sensitive, </span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> then we need to define the sequence to have the upper case letters first</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[] <span style="color:#E28964;">=</span> <span style="color:#DAD085;">array</span>(<span style="color:#65B042;"><span style="color:#65B042;">'</span>type<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#65B042;"><span style="color:#65B042;">'</span>@<span style="color:#65B042;">'</span></span>, <span style="color:#65B042;"><span style="color:#65B042;">'</span>lower<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#65B042;"><span style="color:#65B042;">'</span>A<span style="color:#65B042;">'</span></span>, <span style="color:#65B042;"><span style="color:#65B042;">'</span>upper<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#65B042;"><span style="color:#65B042;">'</span>D<span style="color:#65B042;">'</span></span>)<span style="color:#E28964;">;</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[] <span style="color:#E28964;">=</span> <span style="color:#DAD085;">array</span>(<span style="color:#65B042;"><span style="color:#65B042;">'</span>type<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#65B042;"><span style="color:#65B042;">'</span>#<span style="color:#65B042;">'</span></span>, <span style="color:#65B042;"><span style="color:#65B042;">'</span>lower<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#3387CC;">1</span>, <span style="color:#65B042;"><span style="color:#65B042;">'</span>upper<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#3387CC;">3</span>)<span style="color:#E28964;">;</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[] <span style="color:#E28964;">=</span> <span style="color:#DAD085;">array</span>(<span style="color:#65B042;"><span style="color:#65B042;">'</span>type<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#65B042;"><span style="color:#65B042;">'</span>@<span style="color:#65B042;">'</span></span>, <span style="color:#65B042;"><span style="color:#65B042;">'</span>lower<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#65B042;"><span style="color:#65B042;">'</span>A<span style="color:#65B042;">'</span></span>, <span style="color:#65B042;"><span style="color:#65B042;">'</span>upper<span style="color:#65B042;">'</span></span><span style="color:#E28964;">=></span><span style="color:#65B042;"><span style="color:#65B042;">'</span>B<span style="color:#65B042;">'</span></span>)<span style="color:#E28964;">;</span> iterate(<span style="color:#E9C062;"><span style="color:#E9C062;">'/</span>%0%%1%-%2%-%3%<span style="color:#E9C062;">/'</span></span>, <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>, <span style="color:#65B042;"><span style="color:#65B042;">"</span>mycall<span style="color:#65B042;">"</span></span>)<span style="color:#E28964;">;</span> <span style="color:#99CF50;">function</span> <span style="color:#89BDFF;">mycall</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>data</span>, &<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>) { <span style="color:#DAD085;">echo</span> <span style="color:#65B042;"><span style="color:#65B042;">"</span><strong><span style="color:#65B042;">"</span></span> <span style="color:#E28964;">.</span><span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>data</span> <span style="color:#E28964;">.</span> <span style="color:#65B042;"><span style="color:#65B042;">"</span></strong><br /><span style="color:#65B042;">"</span></span><span style="color:#E28964;">;</span> <span style="color:#E28964;">return</span> <span style="color:#3387CC;">true</span><span style="color:#E28964;">;</span> } <span style="color:#99CF50;">function</span> <span style="color:#89BDFF;">iterate</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>format</span>, &<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>, <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>call</span> <span style="color:#E28964;">=</span> <span style="color:#3387CC;">null</span>) { updateCounts(<span style="color:#DAD085;">array_reverse</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>, <span style="color:#3387CC;">true</span>), <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>)<span style="color:#E28964;">;</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>vars</span> <span style="color:#E28964;">=</span> <span style="color:#DAD085;">array</span>()<span style="color:#E28964;">;</span> <span style="color:#E28964;">foreach</span> (<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span> <span style="color:#E28964;">as</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>key</span> <span style="color:#E28964;">=></span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>val</span>) { <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>vars</span>[<span style="color:#65B042;"><span style="color:#65B042;">"</span>%<span style="color:#8A9A95;"><span style="color:#8A9A95;">$</span>key</span>%<span style="color:#65B042;">"</span></span>] <span style="color:#E28964;">=</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>val</span>[<span style="color:#65B042;"><span style="color:#65B042;">'</span>cur<span style="color:#65B042;">'</span></span>]<span style="color:#E28964;">;</span> } <span style="color:#E28964;">if</span> (<span style="color:#E28964;">!</span><span style="color:#DAD085;">is_null</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>call</span>)) { <span style="color:#E28964;">if</span> (<span style="color:#E28964;">!</span><span style="color:#DAD085;">call_user_func</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>call</span>, <span style="color:#DAD085;">str_replace</span>(<span style="color:#DAD085;">array_keys</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>vars</span>), <span style="color:#DAD085;">array_values</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>vars</span>), <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>format</span>), <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>)) { <span style="color:#E28964;">return</span><span style="color:#E28964;">;</span> } } <span style="color:#E28964;">else</span> { <span style="color:#DAD085;">echo</span> <span style="color:#DAD085;">str_replace</span>(<span style="color:#DAD085;">array_keys</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>vars</span>), <span style="color:#DAD085;">array_values</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>vars</span>), <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>format</span>) <span style="color:#E28964;">.</span> <span style="color:#65B042;"><span style="color:#65B042;">"</span><br /><span style="color:#65B042;">"</span></span><span style="color:#E28964;">;</span> } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span>keep working if we aren't done.</span> <span style="color:#E28964;">foreach</span> (<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span> <span style="color:#E28964;">as</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>key</span> <span style="color:#E28964;">=></span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>val</span>) { <span style="color:#E28964;">if</span> (<span style="color:#E28964;">!</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>val</span>[<span style="color:#65B042;"><span style="color:#65B042;">'</span>cur<span style="color:#65B042;">'</span></span>] <span style="color:#E28964;">=</span><span style="color:#E28964;">=</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>val</span>[<span style="color:#65B042;"><span style="color:#65B042;">'</span>upper<span style="color:#65B042;">'</span></span>])) { <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>iterate</span> <span style="color:#E28964;">=</span> <span style="color:#3387CC;">true</span><span style="color:#E28964;">;</span> } } <span style="color:#E28964;">if</span> (<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>iterate</span>) { iterate(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>format</span>, <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>, <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>call</span>)<span style="color:#E28964;">;</span> } } <span style="color:#99CF50;">function</span> <span style="color:#89BDFF;">updateCounts</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>arr</span>, &<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>) { <span style="color:#E28964;">foreach</span> (<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>arr</span> <span style="color:#E28964;">as</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>key</span> <span style="color:#E28964;">=></span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>val</span>) { <span style="color:#E28964;">if</span> (<span style="color:#DAD085;">isset</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>val</span>[<span style="color:#65B042;"><span style="color:#65B042;">'</span>cur<span style="color:#65B042;">'</span></span>])) { <span style="color:#E28964;">if</span> (<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>val</span>[<span style="color:#65B042;"><span style="color:#65B042;">'</span>cur<span style="color:#65B042;">'</span></span>] <span style="color:#E28964;">=</span><span style="color:#E28964;">=</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>val</span>[<span style="color:#65B042;"><span style="color:#65B042;">'</span>upper<span style="color:#65B042;">'</span></span>]) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Reset to lower, continue</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>key</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>cur<span style="color:#65B042;">'</span></span>] <span style="color:#E28964;">=</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>key</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>lower<span style="color:#65B042;">'</span></span>]<span style="color:#E28964;">;</span> } <span style="color:#E28964;">else</span> { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Add One, exit function</span> <span style="color:#E28964;">switch</span> (<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>key</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>type<span style="color:#65B042;">'</span></span>]) { <span style="color:#E28964;">case</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>#<span style="color:#65B042;">'</span></span>: <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>key</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>cur<span style="color:#65B042;">'</span></span>]<span style="color:#E28964;">++</span><span style="color:#E28964;">;</span> <span style="color:#E28964;">break</span><span style="color:#E28964;">;</span> <span style="color:#E28964;">case</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>@<span style="color:#65B042;">'</span></span>: <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>chr</span> <span style="color:#E28964;">=</span> <span style="color:#DAD085;">ord</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>key</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>cur<span style="color:#65B042;">'</span></span>])<span style="color:#E28964;">;</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span>need to jump over none alphabetic chars here...</span> <span style="color:#E28964;">if</span> (<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>chr</span> <span style="color:#E28964;">=</span><span style="color:#E28964;">=</span> <span style="color:#3387CC;">90</span>) { <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>chr</span> <span style="color:#E28964;">=</span> <span style="color:#3387CC;">97</span><span style="color:#E28964;">;</span> } <span style="color:#E28964;">else</span> { <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>chr</span><span style="color:#E28964;">++</span><span style="color:#E28964;">;</span> } <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>key</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>cur<span style="color:#65B042;">'</span></span>] <span style="color:#E28964;">=</span> <span style="color:#DAD085;">chr</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>chr</span>)<span style="color:#E28964;">;</span> <span style="color:#E28964;">break</span><span style="color:#E28964;">;</span> <span style="color:#E28964;">default</span>: <span style="color:#E28964;">die</span>(<span style="color:#65B042;"><span style="color:#65B042;">'</span>Unknown Rule Type<span style="color:#65B042;">'</span></span>)<span style="color:#E28964;">;</span> } <span style="color:#E28964;">return</span><span style="color:#E28964;">;</span> } } <span style="color:#E28964;">else</span> { <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>key</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>cur<span style="color:#65B042;">'</span></span>] <span style="color:#E28964;">=</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>rules</span>[<span style="color:#3E87E3;"><span style="color:#3E87E3;">$</span>key</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>lower<span style="color:#65B042;">'</span></span>]<span style="color:#E28964;">;</span> } } } ?> </pre> </div> </div> <a href="http://refactormycode.com/codes/325-rules-based-iterator" style="color:#fff" title="As seen on RefactorMyCode.com"><img alt="Small_logo" src="http://refactormycode.com/images/small_logo.gif" style="border:0" /></a>