<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zend Framework Blog</title>
	<atom:link href="http://blog.richardknop.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.richardknop.com</link>
	<description>TDD, PHPUnit, RESTful Web Services, MVC, PHP 5.4, Zend Framework 1 &#38; 2,  Doctrine 2, Python, Django, AWS, JavaScript, Git, Security, Algorithms and much more</description>
	<lastBuildDate>Thu, 02 May 2013 22:54:18 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Faster Autoloading With Zend Framework 2</title>
		<link>http://blog.richardknop.com/2013/05/faster-autoloading-with-zend-framework-2/</link>
		<comments>http://blog.richardknop.com/2013/05/faster-autoloading-with-zend-framework-2/#comments</comments>
		<pubDate>Thu, 02 May 2013 22:11:35 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[Performace]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework 2]]></category>
		<category><![CDATA[Autoloading]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=825</guid>
		<description><![CDATA[Standard autoloader that comes with Zend Framework 2 is not and ideal one to use in production environment. I would suggest using a classmap autoloader which is faster. Here is how it works. When installing dependencies specified in composer.json, use -o option in order to generate classmap file: php composer.phar install -o It will create [...]]]></description>
				<content:encoded><![CDATA[<p>Standard autoloader that comes with Zend Framework 2 is not and ideal one to use in production environment. I would suggest using a classmap autoloader which is faster. Here is how it works. When installing dependencies specified in composer.json, use -o option in order to generate classmap file:</p>
<pre>php composer.phar install -o</pre>
<p>It will create a PHP file at vendor/composer/autoload_<wbr />classmap.php path which contains a static array of all knows classes from dependencies (Zend Framework 2, Doctrine 2 etc) with namespaces and paths to files.</p>
<p>You should also autoload all your modules in the same way. Either do it manually &#8211; cd into module folder and generate the classmap file:</p>
<pre>cd module/Foo
../../vendor/bin/classmap_generator.php -w</pre>
<p>Or use ANT:</p>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;target</span> <span class="re0">name</span>=<span class="st0">&quot;classmapgenerator&quot;</span> <span class="re0">description</span>=<span class="st0">&quot;&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;exec</span> <span class="re0">executable</span>=<span class="st0">&quot;php&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;${basedir}/vendor/zendframework/zendframework/bin/classmap_generator.php&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;-w&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;-l&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;module/Foo&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/exec<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;exec</span> <span class="re0">executable</span>=<span class="st0">&quot;php&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;${basedir}/vendor/zendframework/zendframework/bin/classmap_generator.php&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;-w&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;-l&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;module/Bar&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/exec<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;/target<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>Inside your Module.php, change getAutoloaderConfig() method to look like this:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">function</span> getAutoloaderConfig<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#39;Zend<span class="es0">\L</span>oader<span class="es0">\C</span>lassMapAutoloader&#39;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; __DIR__ <span class="sy0">.</span> <span class="st0">&#39;/autoload_classmap.php&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Finally, change your init_autoloader.php file:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span> __DIR__ <span class="sy0">.</span> <span class="st0">&#39;/vendor/zendframework/zendframework/library/Zend/Loader/AutoloaderFactory.php&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span> __DIR__ <span class="sy0">.</span> <span class="st0">&#39;/vendor/zendframework/zendframework/library/Zend/Loader/ClassMapAutoloader.php&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">Zend\Loader\AutoloaderFactory<span class="sy0">::</span><span class="me2">factory</span><span class="br0">&#40;</span><span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&#39;Zend<span class="es0">\L</span>oader<span class="es0">\C</span>lassMapAutoloader&#39;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#39;Composer&#39;</span> <span class="sy0">=&gt;</span> __DIR__ <span class="sy0">.</span> <span class="st0">&#39;/vendor/composer/autoload_classmap.php&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>Done! I don&#8217;t have any benchmarks at the moment. If I will have more free time, I will run some benchmarks to see how much faster it is actually.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2013/05/faster-autoloading-with-zend-framework-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Select a radio button with Mink / Behat</title>
		<link>http://blog.richardknop.com/2013/04/select-a-radio-button-with-mink-behat/</link>
		<comments>http://blog.richardknop.com/2013/04/select-a-radio-button-with-mink-behat/#comments</comments>
		<pubDate>Tue, 30 Apr 2013 13:40:14 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[BDD]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Behat]]></category>
		<category><![CDATA[Gherkin]]></category>
		<category><![CDATA[Mink]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=820</guid>
		<description><![CDATA[Either I am completely blind or I just haven&#8217;t found an out-of-box solution for selecting a radio button with Mink / Behat. I have written a simple step definition which does this for me. In order for it to work, you have to have the radio button input element wrapped by a label element. Use [...]]]></description>
				<content:encoded><![CDATA[<p>Either I am completely blind or I just haven&#8217;t found an out-of-box solution for selecting a radio button with Mink / Behat. I have written a simple step definition which does this for me. In order for it to work, you have to have the radio button input element wrapped by a label element. Use the label text as argument:</p>
<div class="geshi no php">
<div class="head">/**</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;<span class="sy0">*</span> <span class="sy0">@</span>When <span class="sy0">/</span>^I check the <span class="st0">&quot;([^&quot;</span><span class="br0">&#93;</span><span class="sy0">*</span><span class="br0">&#41;</span><span class="st0">&quot; radio button$/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> public function iCheckTheRadioButton($labelText)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; {</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; foreach ($this-&gt;getMainContext()-&gt;getSession()-&gt;getPage()-&gt;findAll(&#39;css&#39;, &#39;label&#39;) as $label) {</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; if ($labelText === $label-&gt;getText() &amp;&amp; $label-&gt;has(&#39;css&#39;, &#39;input[type=&quot;</span>radio<span class="st0">&quot;]&#39;)) {</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;getMainContext()-&gt;fillField($label-&gt;find(&#39;css&#39;, &#39;input[type=&quot;</span>radio<span class="st0">&quot;]&#39;)-&gt;getAttribute(&#39;name&#39;), $label-&gt;find(&#39;css&#39;, &#39;input[type=&quot;</span>radio<span class="st0">&quot;]&#39;)-&gt;getAttribute(&#39;value&#39;));</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; }</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; }</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; throw new <span class="es0">\E</span>xception(&#39;Radio button not found&#39;);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> }</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"</span></div>
</li>
</ol>
</div>
<p>Use it like this inside your feature:</p>
<pre>When I check the "Enabled" radio button</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2013/04/select-a-radio-button-with-mink-behat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introduction to boto (Python interface to AWS)</title>
		<link>http://blog.richardknop.com/2013/02/introduction-to-boto-python-interface-to-aws/</link>
		<comments>http://blog.richardknop.com/2013/02/introduction-to-boto-python-interface-to-aws/#comments</comments>
		<pubDate>Sat, 23 Feb 2013 20:54:31 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[boto]]></category>
		<category><![CDATA[S3]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=815</guid>
		<description><![CDATA[More and more companies are using cloud storage for their files these days. There are many cloud services you can choose from (Windows Azure, Ubuntu Cloud, Amazon Web Services etc). I have used mainly Amazon Web Services (AWS) so I will show you how to easily upload files to S3 and how to copy files [...]]]></description>
				<content:encoded><![CDATA[<p>More and more companies are using cloud storage for their files these days. There are many cloud services you can choose from (Windows Azure, Ubuntu Cloud, Amazon Web Services etc). I have used mainly Amazon Web Services (<a href="http://aws.amazon.com/">AWS</a>) so I will show you how to easily upload files to S3 and how to copy files on S3 to different locations from Python script.</p>
<p>The only thing you need is Python and <a href="https://github.com/boto/boto">boto</a> which is a Python interface to AWS. You can install it via pip:</p>
<pre>pip install boto</pre>
<p>Before uploading files to S3 you need to know your access key and secret key which will be provided to you by Amazon. You also need to create a bucket which is something like a namespace or a directory on S3. Once you have your access key, secret key and you have created a bucket, it&#8217;s easy to upload files to it with boto.</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">from</span> boto.<span class="me1">s3</span>.<span class="me1">connection</span> <span class="kw1">import</span> S3Connection</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">YOUR_ACCESS_KEY_ID = <span class="st0">&quot;MY_ACCESS_KEY&quot;</span></div>
</li>
<li class="li1">
<div class="de1">YOUR_SECRET_ACCESS_KEY = <span class="st0">&quot;MY_SECRET_KEY&quot;</span></div>
</li>
<li class="li1">
<div class="de1">BUCKET = <span class="st0">&quot;MY_COOL_BUCKET&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">conn = S3Connection<span class="br0">&#40;</span>YOUR_ACCESS_KEY_ID, YOUR_SECRET_ACCESS_KEY<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">bucket = conn.<span class="me1">get_bucket</span><span class="br0">&#40;</span>BUCKET<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">files_to_upload = <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&#39;/path/to/hello.txt&#39;</span>: <span class="st0">&#39;hello_on_s3.txt&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&#39;/path/to/world.txt&#39;</span>: <span class="st0">&#39;world_on_s3.txt&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> file_to_upload, s3_destination <span class="kw1">in</span> files_to_upload.<span class="me1">iteritems</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; key = bucket.<span class="me1">new_key</span><span class="br0">&#40;</span>s3_destination<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; key.<span class="me1">set_contents_from_filename</span><span class="br0">&#40;</span>file_to_upload<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; key.<span class="me1">set_acl</span><span class="br0">&#40;</span><span class="st0">&#39;public-read&#39;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Next thing you might want to do is to copy a file already uploaded to S3 bucket to a different location. This is how you do it:</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">from</span> boto.<span class="me1">s3</span>.<span class="me1">connection</span> <span class="kw1">import</span> S3Connection</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">YOUR_ACCESS_KEY_ID = <span class="st0">&quot;MY_ACCESS_KEY&quot;</span></div>
</li>
<li class="li1">
<div class="de1">YOUR_SECRET_ACCESS_KEY = <span class="st0">&quot;MY_SECRET_KEY&quot;</span></div>
</li>
<li class="li1">
<div class="de1">BUCKET = <span class="st0">&quot;MY_COOL_BUCKET&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">conn = S3Connection<span class="br0">&#40;</span>YOUR_ACCESS_KEY_ID, YOUR_SECRET_ACCESS_KEY<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">bucket = conn.<span class="me1">get_bucket</span><span class="br0">&#40;</span>BUCKET<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">files_to_copy = <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&#39;hello_on_s3.txt&#39;</span> =<span class="sy0">&gt;</span> <span class="st0">&#39;foo_on_s3.txt&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&#39;world_on_s3.txt&#39;</span> =<span class="sy0">&gt;</span> <span class="st0">&#39;bar_on_s3.txt&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> file_to_copy, new_destination <span class="kw1">in</span> files_to_copy.<span class="me1">iteritems</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; bucket.<span class="me1">copy_key</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; new_destination,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; BUCKET,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; file_to_copy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>The above code will copy the files to a different location in the same bucket. You can also specify a different bucket as well.</p>
<p>There are much more things you can do with boto. This post was just an introduction. Feel free to read the full <a href="http://docs.pythonboto.org/en/latest/">boto documentation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2013/02/introduction-to-boto-python-interface-to-aws/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Access entity manager in Zend Framework 2 unit tests</title>
		<link>http://blog.richardknop.com/2012/09/access-entity-manager-in-zend-framework-2-unit-tests/</link>
		<comments>http://blog.richardknop.com/2012/09/access-entity-manager-in-zend-framework-2-unit-tests/#comments</comments>
		<pubDate>Tue, 25 Sep 2012 20:38:55 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[Doctrine 2]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Zend Framework 2]]></category>
		<category><![CDATA[Entity manager]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=804</guid>
		<description><![CDATA[In order to access the entity manager in your unit tests you will have to make your PHPUnit bootstrap file a little bit more complex. You will need to access the entity manager if you are using Doctrine module together with Zend Framework 2. Here is what I have done: &#60;?php &#160; use Zend\ServiceManager\ServiceManager, &#160; [...]]]></description>
				<content:encoded><![CDATA[<p>In order to access the entity manager in your unit tests you will have to make your PHPUnit bootstrap file a little bit more complex. You will need to access the entity manager if you are using Doctrine module together with Zend Framework 2.</p>
<p>Here is what I have done:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">use Zend\ServiceManager\ServiceManager<span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Zend\Mvc\Service\ServiceManagerConfig<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Bootstrap</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">static</span> <span class="kw2">public</span> <span class="re1">$config</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">static</span> <span class="kw2">public</span> <span class="re1">$sm</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">static</span> <span class="kw2">public</span> <span class="re1">$em</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">static</span> <span class="kw2">public</span> <span class="kw2">function</span> go<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">chdir</span><span class="br0">&#40;</span><span class="kw3">dirname</span><span class="br0">&#40;</span>__DIR__<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">include</span> __DIR__ <span class="sy0">.</span> <span class="st0">&#39;/../init_autoloader.php&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; self<span class="sy0">::</span><span class="re1">$config</span> <span class="sy0">=</span> <span class="kw1">include</span> <span class="st0">&#39;config/application.config.php&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Zend\Mvc\Application<span class="sy0">::</span><span class="me2">init</span><span class="br0">&#40;</span>self<span class="sy0">::</span><span class="re1">$config</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; self<span class="sy0">::</span><span class="re1">$sm</span> <span class="sy0">=</span> self<span class="sy0">::</span><span class="me2">getServiceManager</span><span class="br0">&#40;</span>self<span class="sy0">::</span><span class="re1">$config</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; self<span class="sy0">::</span><span class="re1">$em</span> <span class="sy0">=</span> self<span class="sy0">::</span><span class="me2">getEntityManager</span><span class="br0">&#40;</span>self<span class="sy0">::</span><span class="re1">$sm</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">static</span> <span class="kw2">public</span> <span class="kw2">function</span> getServiceManager<span class="br0">&#40;</span><span class="re1">$config</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$serviceManager</span> <span class="sy0">=</span> <span class="kw2">new</span> ServiceManager<span class="br0">&#40;</span><span class="kw2">new</span> ServiceManagerConfig<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$serviceManager</span><span class="sy0">-&gt;</span><span class="me1">setService</span><span class="br0">&#40;</span><span class="st0">&#39;ApplicationConfig&#39;</span><span class="sy0">,</span> <span class="re1">$config</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$serviceManager</span><span class="sy0">-&gt;</span><span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#39;ModuleManager&#39;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">loadModules</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$serviceManager</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">static</span> <span class="kw2">public</span> <span class="kw2">function</span> getEntityManager<span class="br0">&#40;</span><span class="re1">$serviceManager</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$serviceManager</span><span class="sy0">-&gt;</span><span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#39;doctrine.entitymanager.orm_default&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Bootstrap<span class="sy0">::</span><span class="me2">go</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>And then in your unit tests you can access the entity manager simply by:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">Bootstrap<span class="sy0">:</span><span class="re1">$em</span></div>
</li>
</ol>
</div>
<p>That was quite easy actually.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2012/09/access-entity-manager-in-zend-framework-2-unit-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to unit test redirecting in Zend Framework 2</title>
		<link>http://blog.richardknop.com/2012/09/how-to-unit-test-redirecting-in-zend-framework-2/</link>
		<comments>http://blog.richardknop.com/2012/09/how-to-unit-test-redirecting-in-zend-framework-2/#comments</comments>
		<pubDate>Tue, 25 Sep 2012 20:30:28 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Zend Framework 2]]></category>
		<category><![CDATA[Unit testing with Zend Framework 2]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=802</guid>
		<description><![CDATA[I&#8217;ve been working with Zend Framework 2 last couple of weeks and so far I like it better than the legacy Zend Framework. Proper namespaces and separate bootstrap for each module are nice features. I am still learning all the new features so I will be documenting some helpful ideas. One problem I had today [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been working with Zend Framework 2 last couple of weeks and so far I like it better than the legacy Zend Framework. Proper namespaces and separate bootstrap for each module are nice features. I am still learning all the new features so I will be documenting some helpful ideas.</p>
<p>One problem I had today was I needed to write a unit test for a controller action which under certain condition redirects to a different action using the redirect helper:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">redirect</span><span class="sy0">-&gt;</span><span class="me1">roToute</span><span class="br0">&#40;</span><span class="st0">&#39;routeName&#39;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#39;controller&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;index&#39;</span><span class="sy0">,</span> <span class="st0">&#39;action&#39;</span> <span class="sy0">=</span> <span class="st0">&#39;index&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>Unit testing a controller action was not a problem, I figured that out a week or two ago. In order to write an assertion for redirection, you will need to create a new instance of Zend\Mvc\Router\SimpleRouteStack and add routes you are testing for to it. Then attach the router to Zend\Mvc\MvcEvent.</p>
<p>So include few classes from Zend library plus the controller you want to test:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">use MyModule\Controller\IndexController<span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Zend\Http\Request<span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Zend\Http\Response<span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Zend\Mvc\MvcEvent<span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Zend\Mvc\Router\RouteMatch<span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Zend\Mvc\Router\SimpleRouteStack<span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Zend\Mvc\Router\Http\Segment<span class="sy0">,</span></div>
</li>
</ol>
</div>
<p>Then put this inside your PHPUnit test case&#8217;s setUp method:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">function</span> setUp<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span>_controller <span class="sy0">=</span> <span class="kw2">new</span> IndexController<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span>_request <span class="sy0">=</span> <span class="kw2">new</span> Request<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span>_response <span class="sy0">=</span> <span class="kw2">new</span> Response<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span>_event <span class="sy0">=</span> <span class="kw2">new</span> MvcEvent<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$routeStack</span> <span class="sy0">=</span> <span class="kw2">new</span> SimpleRouteStack<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$route</span> <span class="sy0">=</span> <span class="kw2">new</span> Segment<span class="br0">&#40;</span><span class="st0">&#39;/mymodule/[:controller/[:action/]]&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$routeStack</span><span class="sy0">-&gt;</span><span class="me1">addRoute</span><span class="br0">&#40;</span><span class="st0">&#39;mymodule&#39;</span><span class="sy0">,</span> <span class="re1">$route</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span>_event<span class="sy0">-&gt;</span><span class="me1">setRouter</span><span class="br0">&#40;</span><span class="re1">$routeStack</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$routeMatch</span> <span class="sy0">=</span> <span class="kw2">new</span> RouteMatch<span class="br0">&#40;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#39;controller&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;index&#39;</span><span class="sy0">,</span> <span class="st0">&#39;action&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;index&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$routeMatch</span><span class="sy0">-&gt;</span><span class="me1">setMatchedRouteName</span><span class="br0">&#40;</span><span class="st0">&#39;admin&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span>_event<span class="sy0">-&gt;</span><span class="me1">setRouteMatch</span><span class="br0">&#40;</span><span class="re1">$routeMatch</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span>_controller<span class="sy0">-&gt;</span><span class="me1">setEvent</span><span class="br0">&#40;</span><span class="re1">$this</span><span class="sy0">-&gt;</span>_event<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>After you have done all that, there are two ways how to assert a redirection has actually happened.</p>
<p>First, you can test for a 302 HTTP status:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">function</span> testIndexActionRedirectsByHttpStatus<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span>_controller<span class="sy0">-&gt;</span><span class="me1">dispatch</span><span class="br0">&#40;</span><span class="re1">$this</span><span class="sy0">-&gt;</span>_request<span class="sy0">,</span> <span class="re1">$this</span><span class="sy0">-&gt;</span>_response<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">assertEquals</span><span class="br0">&#40;</span><span class="nu0">302</span><span class="sy0">,</span> <span class="re1">$this</span><span class="sy0">-&gt;</span>_response<span class="sy0">-&gt;</span><span class="me1">getStatusCode</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Second, you can check for the Location header:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">function</span> testIndexActionRedirectsToCorrectUri<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span>_controller<span class="sy0">-&gt;</span><span class="me1">dispatch</span><span class="br0">&#40;</span><span class="re1">$this</span><span class="sy0">-&gt;</span>_request<span class="sy0">,</span> <span class="re1">$this</span><span class="sy0">-&gt;</span>_response<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">assertEquals</span><span class="br0">&#40;</span><span class="st0">&#39;/mymodule/mycontroller/myaction/&#39;</span><span class="sy0">,</span> <span class="re1">$this</span><span class="sy0">-&gt;</span>_event<span class="sy0">-&gt;</span><span class="me1">getResponse</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getHeaders</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#39;Location&#39;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getUri</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Ideally use both assertions to be sure.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2012/09/how-to-unit-test-redirecting-in-zend-framework-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a self signed X509 certificate in Python</title>
		<link>http://blog.richardknop.com/2012/08/create-a-self-signed-x509-certificate-in-python/</link>
		<comments>http://blog.richardknop.com/2012/08/create-a-self-signed-x509-certificate-in-python/#comments</comments>
		<pubDate>Sun, 05 Aug 2012 04:14:46 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Asynchronous encryption]]></category>
		<category><![CDATA[RSA]]></category>
		<category><![CDATA[Self signed certificate]]></category>
		<category><![CDATA[X509]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=794</guid>
		<description><![CDATA[Here is how to create a self signed certificate in Python using OpenSSL: from OpenSSL import crypto, SSL from socket import gethostname from pprint import pprint from time import gmtime, mktime &#160; CERT_FILE = &#34;selfsigned.crt&#34; KEY_FILE = &#34;private.key&#34; &#160; def create_self_signed_cert&#40;&#41;:                      # create a key pair         k = crypto.PKey&#40;&#41;         k.generate_key&#40;crypto.TYPE_&#60;wbr&#62;RSA, 1024&#41; [...]]]></description>
				<content:encoded><![CDATA[<p>Here is how to create a self signed certificate in Python using OpenSSL:</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">from</span> OpenSSL <span class="kw1">import</span> crypto, SSL</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> <span class="kw3">socket</span> <span class="kw1">import</span> gethostname</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> <span class="kw3">pprint</span> <span class="kw1">import</span> <span class="kw3">pprint</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> <span class="kw3">time</span> <span class="kw1">import</span> gmtime, mktime</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">CERT_FILE = <span class="st0">&quot;selfsigned.crt&quot;</span></div>
</li>
<li class="li1">
<div class="de1">KEY_FILE = <span class="st0">&quot;private.key&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> create_self_signed_cert<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">            </div>
</li>
<li class="li1">
<div class="de1">        <span class="co1"># create a key pair</span></div>
</li>
<li class="li1">
<div class="de1">        k = crypto.<span class="me1">PKey</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">        k.<span class="me1">generate_key</span><span class="br0">&#40;</span>crypto.<span class="me1">TYPE_</span><span class="sy0">&lt;</span>wbr<span class="sy0">&gt;</span>RSA, <span class="nu0">1024</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">        <span class="co1"># create a self-signed cert</span></div>
</li>
<li class="li1">
<div class="de1">        cert = crypto.<span class="me1">X509</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">get_subject</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">C</span> = <span class="st0">&quot;UK&quot;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">get_subject</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">ST</span> = <span class="st0">&quot;London&quot;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">get_subject</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">L</span> = <span class="st0">&quot;London&quot;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">get_subject</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">O</span> = <span class="st0">&quot;Dummy Company Ltd&quot;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">get_subject</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">OU</span> = <span class="st0">&quot;Dummy Company Ltd&quot;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">get_subject</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">CN</span> = gethostname<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">set_serial_number</span><span class="br0">&#40;</span><span class="nu0">1000</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">gmtime_adj_notBefore</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">gmtime_adj_notAfter</span><span class="br0">&#40;</span><span class="nu0">10</span><span class="sy0">*&lt;</span>wbr<span class="sy0">&gt;</span><span class="nu0">365</span><span class="sy0">*</span><span class="nu0">24</span><span class="sy0">*</span><span class="nu0">60</span><span class="sy0">*</span><span class="nu0">60</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">set_issuer</span><span class="br0">&#40;</span>cert.<span class="me1">get_</span><span class="sy0">&lt;</span>wbr<span class="sy0">&gt;</span>subject<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">set_pubkey</span><span class="br0">&#40;</span>k<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">        cert.<span class="me1">sign</span><span class="br0">&#40;</span>k, <span class="st0">&#39;sha1&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">        <span class="kw2">open</span><span class="br0">&#40;</span>CERT_FILE, <span class="st0">&quot;wt&quot;</span><span class="br0">&#41;</span>.<span class="me1">write</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">            crypto.<span class="me1">dump_certificate</span><span class="br0">&#40;</span><span class="sy0">&lt;</span>wbr<span class="sy0">&gt;</span>crypto.<span class="me1">FILETYPE_PEM</span>, cert<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">        <span class="kw2">open</span><span class="br0">&#40;</span>KEY_FILE, <span class="st0">&quot;wt&quot;</span><span class="br0">&#41;</span>.<span class="me1">write</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">            crypto.<span class="me1">dump_privatekey</span><span class="br0">&#40;</span>crypto.<span class="sy0">&lt;</span>wbr<span class="sy0">&gt;</span>FILETYPE_PEM, k<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">create_self_signed_cert<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>You can then use m2crypto library to encrypt and decrypt data using this self signed certificate. You use public key to encrypt and private key to decrypt:</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1">f = <span class="kw2">open</span><span class="br0">&#40;</span>CERT_FILE<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">cert_buffer = f.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">f.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> M2Crypto <span class="kw1">import</span> RSA, X509 </div>
</li>
<li class="li1">
<div class="de1">cert = X509.<span class="me1">load_cert_string</span><span class="br0">&#40;</span>cert_<span class="sy0">&lt;</span>wbr<span class="sy0">&gt;</span>buffer, X509.<span class="me1">FORMAT_PEM</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">pub_key = cert.<span class="me1">get_pubkey</span><span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">rsa_key = pub_key.<span class="me1">get_rsa</span><span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">cipher = rsa_key.<span class="me1">public_encrypt</span><span class="br0">&#40;</span><span class="st0">&#39;&lt;wbr&gt;plaintext&#39;</span>, RSA.<span class="me1">pkcs1_padding</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> cipher</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ReadRSA = RSA.<span class="me1">load_key</span><span class="br0">&#40;</span>KEY_FILE<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">try</span>:</div>
</li>
<li class="li1">
<div class="de1">    plaintext = ReadRSA.<span class="me1">private_decrypt</span> <span class="br0">&#40;</span>cipher, RSA.<span class="me1">pkcs1_padding</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">except</span>:</div>
</li>
<li class="li1">
<div class="de1">    <span class="kw1">print</span> <span class="st0">&quot;Error: wrong key?&quot;</span></div>
</li>
<li class="li1">
<div class="de1">    plaintext = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> plaintext</div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2012/08/create-a-self-signed-x509-certificate-in-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Merge sort PHP implementation</title>
		<link>http://blog.richardknop.com/2012/06/merge-sort-php-implementation/</link>
		<comments>http://blog.richardknop.com/2012/06/merge-sort-php-implementation/#comments</comments>
		<pubDate>Wed, 27 Jun 2012 20:29:28 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Merge sort]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=785</guid>
		<description><![CDATA[After a short pause I am continuing my challenge to implement all sorting algorithms listed on Wikipedia in PHP. Merge sort is a bit more advanced than previous algorithms but once you figure it out it&#8217;s quite neat. Personally, I hate recursion and try to avoid it as much as possible (speaking of recursion, check [...]]]></description>
				<content:encoded><![CDATA[<p>After a short pause I am continuing my challenge to implement all <a href="http://en.wikipedia.org/wiki/Sorting_algorithm">sorting algorithms</a> listed on Wikipedia in PHP. <a href="http://en.wikipedia.org/wiki/Merge_sort">Merge sort</a> is a bit more advanced than previous algorithms but once you figure it out it&#8217;s quite neat.</p>
<p>Personally, I hate recursion and try to avoid it as much as possible (speaking of recursion, check out my weblogs about <a href="http://blog.richardknop.com/2009/05/adjacency-list-model/">Adjacency list model</a> and <a href="http://blog.richardknop.com/2009/05/nested-set-model/">Nested set model</a> &#8211; which is in my opinion a better solution in most cases) &#8211; but sorting is one area where recursion is needed.</p>
<p>Merge sort was invented by <a href="http://en.wikipedia.org/wiki/John_von_Neumann">John Von Neumann</a>, a big name in computer science history. It is a divide and conquer algorithm. It sorts arrays by dividing them recursively into halves (divide) and then sorting and merging them back together (conquer).</p>
<p>The good thing about this algorithm is it preserves order of equal elements (if you have two 25s in an array, merge sort will place the one that came earlier in the original array on the left side).</p>
<p>Here is my PHP implementation consisting of two functions: divide and conquer:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$arr</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="nu0">100</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$arr</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$i</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">shuffle</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$sortedArr</span> <span class="sy0">=</span> divide<span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re1">$sortedArr</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> divide<span class="br0">&#40;</span><span class="kw3">array</span> <span class="re1">$arr</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="nu0">1</span> <span class="sy0">===</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$arr</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$left</span> <span class="sy0">=</span> <span class="re1">$right</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$middle</span> <span class="sy0">=</span> <span class="kw3">round</span><span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">/</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="re1">$middle</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$left</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="re1">$middle</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$right</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$left</span> <span class="sy0">=</span> divide<span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$right</span> <span class="sy0">=</span> divide<span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> conquer<span class="br0">&#40;</span><span class="re1">$left</span><span class="sy0">,</span> <span class="re1">$right</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> conquer<span class="br0">&#40;</span><span class="kw3">array</span> <span class="re1">$left</span><span class="sy0">,</span> <span class="kw3">array</span> <span class="re1">$right</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$result</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span> <span class="sy0">||</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$firstLeft</span> <span class="sy0">=</span> <span class="kw3">current</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$firstRight</span> <span class="sy0">=</span> <span class="kw3">current</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$firstLeft</span> <span class="sy0">&lt;=</span> <span class="re1">$firstRight</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$result</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array_shift</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$result</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array_shift</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$result</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array_shift</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$result</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array_shift</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$result</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Which will output:</p>
<pre>array(100) {
  [0]=&gt;
  int(0)
  [1]=&gt;
  int(1)
  [2]=&gt;
  int(2)
  [3]=&gt;
  int(3)
  [4]=&gt;
  int(4)
  [5]=&gt;
  int(5)
  [6]=&gt;
  int(6)
  [7]=&gt;
  int(7)
  [8]=&gt;
  int(8)
  [9]=&gt;
  int(9)
  [10]=&gt;
  int(10)
  [11]=&gt;
  int(11)
  [12]=&gt;
  int(12)
  [13]=&gt;
  int(13)
  [14]=&gt;
  int(14)
  [15]=&gt;
  int(15)
  [16]=&gt;
  int(16)
  [17]=&gt;
  int(17)
  [18]=&gt;
  int(18)
  [19]=&gt;
  int(19)
  [20]=&gt;
  int(20)
  [21]=&gt;
  int(21)
  [22]=&gt;
  int(22)
  [23]=&gt;
  int(23)
  [24]=&gt;
  int(24)
  [25]=&gt;
  int(25)
  [26]=&gt;
  int(26)
  [27]=&gt;
  int(27)
  [28]=&gt;
  int(28)
  [29]=&gt;
  int(29)
  [30]=&gt;
  int(30)
  [31]=&gt;
  int(31)
  [32]=&gt;
  int(32)
  [33]=&gt;
  int(33)
  [34]=&gt;
  int(34)
  [35]=&gt;
  int(35)
  [36]=&gt;
  int(36)
  [37]=&gt;
  int(37)
  [38]=&gt;
  int(38)
  [39]=&gt;
  int(39)
  [40]=&gt;
  int(40)
  [41]=&gt;
  int(41)
  [42]=&gt;
  int(42)
  [43]=&gt;
  int(43)
  [44]=&gt;
  int(44)
  [45]=&gt;
  int(45)
  [46]=&gt;
  int(46)
  [47]=&gt;
  int(47)
  [48]=&gt;
  int(48)
  [49]=&gt;
  int(49)
  [50]=&gt;
  int(50)
  [51]=&gt;
  int(51)
  [52]=&gt;
  int(52)
  [53]=&gt;
  int(53)
  [54]=&gt;
  int(54)
  [55]=&gt;
  int(55)
  [56]=&gt;
  int(56)
  [57]=&gt;
  int(57)
  [58]=&gt;
  int(58)
  [59]=&gt;
  int(59)
  [60]=&gt;
  int(60)
  [61]=&gt;
  int(61)
  [62]=&gt;
  int(62)
  [63]=&gt;
  int(63)
  [64]=&gt;
  int(64)
  [65]=&gt;
  int(65)
  [66]=&gt;
  int(66)
  [67]=&gt;
  int(67)
  [68]=&gt;
  int(68)
  [69]=&gt;
  int(69)
  [70]=&gt;
  int(70)
  [71]=&gt;
  int(71)
  [72]=&gt;
  int(72)
  [73]=&gt;
  int(73)
  [74]=&gt;
  int(74)
  [75]=&gt;
  int(75)
  [76]=&gt;
  int(76)
  [77]=&gt;
  int(77)
  [78]=&gt;
  int(78)
  [79]=&gt;
  int(79)
  [80]=&gt;
  int(80)
  [81]=&gt;
  int(81)
  [82]=&gt;
  int(82)
  [83]=&gt;
  int(83)
  [84]=&gt;
  int(84)
  [85]=&gt;
  int(85)
  [86]=&gt;
  int(86)
  [87]=&gt;
  int(87)
  [88]=&gt;
  int(88)
  [89]=&gt;
  int(89)
  [90]=&gt;
  int(90)
  [91]=&gt;
  int(91)
  [92]=&gt;
  int(92)
  [93]=&gt;
  int(93)
  [94]=&gt;
  int(94)
  [95]=&gt;
  int(95)
  [96]=&gt;
  int(96)
  [97]=&gt;
  int(97)
  [98]=&gt;
  int(98)
  [99]=&gt;
  int(99)
}</pre>
<p>Best way to understand how it works is to apply it to a smaller array and add a little debugging inside the functions so we can see what&#8217;s happening. After a little tweaking:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$arr</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="nu0">4</span><span class="sy0">,</span> <span class="nu0">5</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">3</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$sortedArr</span> <span class="sy0">=</span> divide<span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re1">$sortedArr</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> divide<span class="br0">&#40;</span><span class="kw3">array</span> <span class="re1">$arr</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="nu0">1</span> <span class="sy0">===</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$arr</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$left</span> <span class="sy0">=</span> <span class="re1">$right</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$middle</span> <span class="sy0">=</span> <span class="kw3">round</span><span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">/</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="re1">$middle</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$left</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="re1">$middle</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$right</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$left</span> <span class="sy0">=</span> divide<span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$right</span> <span class="sy0">=</span> divide<span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;We are going to conquer these two arrays:<span class="es0">\n</span>array(&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">implode</span><span class="br0">&#40;</span><span class="st0">&quot;, &quot;</span><span class="sy0">,</span> <span class="re1">$left</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st0">&quot;)<span class="es0">\n</span>array(&quot;</span><span class="sy0">,</span> <span class="kw3">implode</span><span class="br0">&#40;</span><span class="st0">&quot;, &quot;</span><span class="sy0">,</span> <span class="re1">$right</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st0">&quot;)<span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$conquered</span> <span class="sy0">=</span> conquer<span class="br0">&#40;</span><span class="re1">$left</span><span class="sy0">,</span> <span class="re1">$right</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;After conquering we get: array(&quot;</span><span class="sy0">,</span> <span class="kw3">implode</span><span class="br0">&#40;</span><span class="st0">&quot;, &quot;</span><span class="sy0">,</span> <span class="re1">$conquered</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st0">&quot;)<span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$conquered</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> conquer<span class="br0">&#40;</span><span class="kw3">array</span> <span class="re1">$left</span><span class="sy0">,</span> <span class="kw3">array</span> <span class="re1">$right</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$result</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span> <span class="sy0">||</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$firstLeft</span> <span class="sy0">=</span> <span class="kw3">current</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$firstRight</span> <span class="sy0">=</span> <span class="kw3">current</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$firstLeft</span> <span class="sy0">&lt;=</span> <span class="re1">$firstRight</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$result</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array_shift</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$result</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array_shift</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$result</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array_shift</span><span class="br0">&#40;</span><span class="re1">$left</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$result</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array_shift</span><span class="br0">&#40;</span><span class="re1">$right</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$result</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Which will output a nice explanation of what&#8217;s happening, we can see what steps are being done and in what order:</p>
<pre>We are going to conquer these two arrays:
array(4)
array(5)
After conquering we get: array(4, 5)

We are going to conquer these two arrays:
array(4, 5)
array(1)
After conquering we get: array(1, 4, 5)

We are going to conquer these two arrays:
array(3)
array(2)
After conquering we get: array(2, 3)

We are going to conquer these two arrays:
array(1, 4, 5)
array(2, 3)
After conquering we get: array(1, 2, 3, 4, 5)

array(5) {
  [0]=&gt;
  int(1)
  [1]=&gt;
  int(2)
  [2]=&gt;
  int(3)
  [3]=&gt;
  int(4)
  [4]=&gt;
  int(5)
}</pre>
<p>By the way, here are my previous posts from this challenge:</p>
<ol>
<li><a href="http://blog.richardknop.com/2012/06/bubble-sort-algorithm-php-implementation/">Bubble sort algorithm PHP implementation</a></li>
<li><a href="http://blog.richardknop.com/2012/06/selection-sort-algorithm-php-implementation/">Selection sort algorithm PHP implementation</a></li>
<li><a href="http://blog.richardknop.com/2012/06/insertion-sort-algorithm-php-implementation/">Insertion sort algorithm PHP implementation</a></li>
<li><a href="http://blog.richardknop.com/2012/06/shellsort-php-implementation/">Shellsort PHP implementation</a></li>
<li><a href="http://blog.richardknop.com/2012/06/comb-sort-php-implementation/">Comb sort PHP implementation</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2012/06/merge-sort-php-implementation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Comb sort PHP implementation</title>
		<link>http://blog.richardknop.com/2012/06/comb-sort-php-implementation/</link>
		<comments>http://blog.richardknop.com/2012/06/comb-sort-php-implementation/#comments</comments>
		<pubDate>Tue, 19 Jun 2012 21:31:57 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Comb sort]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=782</guid>
		<description><![CDATA[After tackling the Shellsort, Comb sort is very similar. Shellsort was basically a generalisation of the Insertion sort, Comb sort is a generalisation of the Bubble sort. In the same way Shellsort was decreasing a gap between elements for subarrays been sent as input to the Insertion sort function, Comb sort is also decreasing the [...]]]></description>
				<content:encoded><![CDATA[<p>After tackling the <a href="http://blog.richardknop.com/2012/06/shellsort-php-implementation/">Shellsort</a>, <a href="http://en.wikipedia.org/wiki/Comb_sort">Comb sort</a> is very similar. Shellsort was basically a generalisation of the <a href="http://blog.richardknop.com/2012/06/insertion-sort-algorithm-php-implementation/">Insertion sort</a>, Comb sort is a generalisation of the <a href="http://blog.richardknop.com/2012/06/bubble-sort-algorithm-php-implementation/">Bubble sort</a>. In the same way Shellsort was decreasing a gap between elements for subarrays been sent as input to the Insertion sort function, Comb sort is also decreasing the gap after every iteration and sending increasingly lengthy subarrays to the Bubble sort function.</p>
<p>According to Wikipedia, this algorithm works best with a shrink factor of around 1.3 (a little less than that but let&#8217;s keep this simple).</p>
<p>Here is my implementation:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">define</span><span class="br0">&#40;</span><span class="st0">&#39;SHRINK_FACTOR&#39;</span><span class="sy0">,</span> <span class="nu0">1.3</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$arr</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="nu0">100</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$arr</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$i</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">shuffle</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$sortedArr</span> <span class="sy0">=</span> combSort<span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re1">$sortedArr</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> combSort<span class="br0">&#40;</span><span class="kw3">array</span> <span class="re1">$arr</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$gap</span> <span class="sy0">=</span> <span class="kw3">floor</span><span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">/</span>SHRINK_FACTOR<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re1">$gap</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">-</span><span class="re1">$gap</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arrWithGapsKeys</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arrWithGaps</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$loop</span> <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$j</span> <span class="sy0">=</span> <span class="re1">$i</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re1">$loop</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arrWithGapsKeys</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span><span class="re1">$j</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arrWithGaps</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$j</span> <span class="sy0">+=</span> <span class="re1">$gap</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$loop</span> <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arrWithGapsOrdered</span> <span class="sy0">=</span> bubbleSort<span class="br0">&#40;</span><span class="re1">$arrWithGaps</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$arrWithGapsKeys</span> <span class="kw1">as</span> <span class="re1">$key</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$key</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">current</span><span class="br0">&#40;</span><span class="re1">$arrWithGapsOrdered</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">next</span><span class="br0">&#40;</span><span class="re1">$arrWithGapsOrdered</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$gap</span> <span class="sy0">=</span> <span class="kw3">floor</span><span class="br0">&#40;</span><span class="re1">$gap</span><span class="sy0">/</span>SHRINK_FACTOR<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$arr</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> bubbleSort<span class="br0">&#40;</span><span class="kw3">array</span> <span class="re1">$arr</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$sorted</span> <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="kw2">false</span> <span class="sy0">===</span> <span class="re1">$sorted</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$sorted</span> <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$current</span> <span class="sy0">=</span> <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$next</span> <span class="sy0">=</span> <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="nu0">+1</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$next</span> <span class="sy0">&lt;</span> <span class="re1">$current</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$next</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="nu0">+1</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$current</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$sorted</span> <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$arr</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Which will result in:</p>
<pre>array(100) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  int(3)
  [4]=>
  int(4)
  [5]=>
  int(5)
  [6]=>
  int(6)
  [7]=>
  int(7)
  [8]=>
  int(8)
  [9]=>
  int(9)
  [10]=>
  int(10)
  [11]=>
  int(11)
  [12]=>
  int(12)
  [13]=>
  int(13)
  [14]=>
  int(14)
  [15]=>
  int(15)
  [16]=>
  int(16)
  [17]=>
  int(17)
  [18]=>
  int(18)
  [19]=>
  int(19)
  [20]=>
  int(20)
  [21]=>
  int(21)
  [22]=>
  int(22)
  [23]=>
  int(23)
  [24]=>
  int(24)
  [25]=>
  int(25)
  [26]=>
  int(26)
  [27]=>
  int(27)
  [28]=>
  int(28)
  [29]=>
  int(29)
  [30]=>
  int(30)
  [31]=>
  int(31)
  [32]=>
  int(32)
  [33]=>
  int(33)
  [34]=>
  int(34)
  [35]=>
  int(35)
  [36]=>
  int(36)
  [37]=>
  int(37)
  [38]=>
  int(38)
  [39]=>
  int(39)
  [40]=>
  int(40)
  [41]=>
  int(41)
  [42]=>
  int(42)
  [43]=>
  int(43)
  [44]=>
  int(44)
  [45]=>
  int(45)
  [46]=>
  int(46)
  [47]=>
  int(47)
  [48]=>
  int(48)
  [49]=>
  int(49)
  [50]=>
  int(50)
  [51]=>
  int(51)
  [52]=>
  int(52)
  [53]=>
  int(53)
  [54]=>
  int(54)
  [55]=>
  int(55)
  [56]=>
  int(56)
  [57]=>
  int(57)
  [58]=>
  int(58)
  [59]=>
  int(59)
  [60]=>
  int(60)
  [61]=>
  int(61)
  [62]=>
  int(62)
  [63]=>
  int(63)
  [64]=>
  int(64)
  [65]=>
  int(65)
  [66]=>
  int(66)
  [67]=>
  int(67)
  [68]=>
  int(68)
  [69]=>
  int(69)
  [70]=>
  int(70)
  [71]=>
  int(71)
  [72]=>
  int(72)
  [73]=>
  int(73)
  [74]=>
  int(74)
  [75]=>
  int(75)
  [76]=>
  int(76)
  [77]=>
  int(77)
  [78]=>
  int(78)
  [79]=>
  int(79)
  [80]=>
  int(80)
  [81]=>
  int(81)
  [82]=>
  int(82)
  [83]=>
  int(83)
  [84]=>
  int(84)
  [85]=>
  int(85)
  [86]=>
  int(86)
  [87]=>
  int(87)
  [88]=>
  int(88)
  [89]=>
  int(89)
  [90]=>
  int(90)
  [91]=>
  int(91)
  [92]=>
  int(92)
  [93]=>
  int(93)
  [94]=>
  int(94)
  [95]=>
  int(95)
  [96]=>
  int(96)
  [97]=>
  int(97)
  [98]=>
  int(98)
  [99]=>
  int(99)
}</pre>
<p>There are some variations of the Comb sort algorithm Combsort11 or Combsort with different end. I will show you how to implement them in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2012/06/comb-sort-php-implementation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Shellsort PHP implementation</title>
		<link>http://blog.richardknop.com/2012/06/shellsort-php-implementation/</link>
		<comments>http://blog.richardknop.com/2012/06/shellsort-php-implementation/#comments</comments>
		<pubDate>Tue, 19 Jun 2012 20:59:41 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Shellsort]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=778</guid>
		<description><![CDATA[Continuing my challenge, after implementing Bubble sort, Selection sort and Insertion sort, here comes Shellsort. Named after Donald Shell, it is basically a generalisation of simpler algorithms like Bubble sort or Insertion sort. It starts with far apart elements. The gap between elements is then decreased after every iteration. That means we start with small [...]]]></description>
				<content:encoded><![CDATA[<p>Continuing my challenge, after implementing <a href="http://blog.richardknop.com/2012/06/bubble-sort-algorithm-php-implementation/">Bubble sort</a>, <a href="http://blog.richardknop.com/2012/06/selection-sort-algorithm-php-implementation/">Selection sort</a> and <a href="http://blog.richardknop.com/2012/06/insertion-sort-algorithm-php-implementation/">Insertion sort</a>, here comes <a href="http://en.wikipedia.org/wiki/Shellsort">Shellsort</a>. Named after <a href="http://en.wikipedia.org/wiki/Donald_Shell">Donald Shell</a>, it is basically a generalisation of simpler algorithms like Bubble sort or Insertion sort. It starts with far apart elements. The gap between elements is then decreased after every iteration.</p>
<p>That means we start with small subarrays and then with every iteration the subarrays are getting bigger as we are decreasing the gap between elements. I chose to start with a gap equal to half of the array length rounded down. After every iteration I divide the gap by two and round down again until zero is reached.</p>
<p>Example:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$arr</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="nu0">100</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$arr</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$i</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">shuffle</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$sortedArr</span> <span class="sy0">=</span> shellSort<span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re1">$sortedArr</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> shellSort<span class="br0">&#40;</span><span class="kw3">array</span> <span class="re1">$arr</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$gap</span> <span class="sy0">=</span> <span class="kw3">floor</span><span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">/</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re1">$gap</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span><span class="sy0">-</span><span class="re1">$gap</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arrWithGapsKeys</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arrWithGaps</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$loop</span> <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$j</span> <span class="sy0">=</span> <span class="re1">$i</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re1">$loop</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arrWithGapsKeys</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span><span class="re1">$j</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arrWithGaps</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$j</span> <span class="sy0">+=</span> <span class="re1">$gap</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$loop</span> <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arrWithGapsOrdered</span> <span class="sy0">=</span> insertionSort<span class="br0">&#40;</span><span class="re1">$arrWithGaps</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$arrWithGapsKeys</span> <span class="kw1">as</span> <span class="re1">$key</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$arr</span><span class="br0">&#91;</span><span class="re1">$key</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">current</span><span class="br0">&#40;</span><span class="re1">$arrWithGapsOrdered</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">next</span><span class="br0">&#40;</span><span class="re1">$arrWithGapsOrdered</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$gap</span> <span class="sy0">=</span> <span class="kw3">floor</span><span class="br0">&#40;</span><span class="re1">$gap</span><span class="sy0">/</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$arr</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> insertionSort<span class="br0">&#40;</span><span class="kw3">array</span> <span class="re1">$table</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$leftHand</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$table</span> <span class="kw1">as</span> <span class="re1">$card</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="nu0">0</span> <span class="sy0">===</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$leftHand</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$leftHand</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$card</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$insertedCard</span> <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$reindexedLeftHand</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$leftHand</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="sy0">&#8211;</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$card</span> <span class="sy0">&gt;=</span> <span class="re1">$leftHand</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$j</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$j</span> <span class="sy0">&lt;=</span> <span class="re1">$i</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$j</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$reindexedLeftHand</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$leftHand</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$reindexedLeftHand</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$card</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$j</span> <span class="sy0">=</span> <span class="re1">$i</span><span class="nu0">+1</span><span class="sy0">;</span> <span class="re1">$j</span> <span class="sy0">&lt;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$leftHand</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$j</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$reindexedLeftHand</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="nu0">+1</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$leftHand</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$insertedCard</span> <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw2">false</span> <span class="sy0">===</span> <span class="re1">$insertedCard</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$reindexedLeftHand</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$card</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$leftHand</span> <span class="kw1">as</span> <span class="re1">$cardInLeftHand</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$reindexedLeftHand</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$cardInLeftHand</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$leftHand</span> <span class="sy0">=</span> <span class="re1">$reindexedLeftHand</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$leftHand</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Will result in:</p>
<pre>array(100) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  int(3)
  [4]=>
  int(4)
  [5]=>
  int(5)
  [6]=>
  int(6)
  [7]=>
  int(7)
  [8]=>
  int(8)
  [9]=>
  int(9)
  [10]=>
  int(10)
  [11]=>
  int(11)
  [12]=>
  int(12)
  [13]=>
  int(13)
  [14]=>
  int(14)
  [15]=>
  int(15)
  [16]=>
  int(16)
  [17]=>
  int(17)
  [18]=>
  int(18)
  [19]=>
  int(19)
  [20]=>
  int(20)
  [21]=>
  int(21)
  [22]=>
  int(22)
  [23]=>
  int(23)
  [24]=>
  int(24)
  [25]=>
  int(25)
  [26]=>
  int(26)
  [27]=>
  int(27)
  [28]=>
  int(28)
  [29]=>
  int(29)
  [30]=>
  int(30)
  [31]=>
  int(31)
  [32]=>
  int(32)
  [33]=>
  int(33)
  [34]=>
  int(34)
  [35]=>
  int(35)
  [36]=>
  int(36)
  [37]=>
  int(37)
  [38]=>
  int(38)
  [39]=>
  int(39)
  [40]=>
  int(40)
  [41]=>
  int(41)
  [42]=>
  int(42)
  [43]=>
  int(43)
  [44]=>
  int(44)
  [45]=>
  int(45)
  [46]=>
  int(46)
  [47]=>
  int(47)
  [48]=>
  int(48)
  [49]=>
  int(49)
  [50]=>
  int(50)
  [51]=>
  int(51)
  [52]=>
  int(52)
  [53]=>
  int(53)
  [54]=>
  int(54)
  [55]=>
  int(55)
  [56]=>
  int(56)
  [57]=>
  int(57)
  [58]=>
  int(58)
  [59]=>
  int(59)
  [60]=>
  int(60)
  [61]=>
  int(61)
  [62]=>
  int(62)
  [63]=>
  int(63)
  [64]=>
  int(64)
  [65]=>
  int(65)
  [66]=>
  int(66)
  [67]=>
  int(67)
  [68]=>
  int(68)
  [69]=>
  int(69)
  [70]=>
  int(70)
  [71]=>
  int(71)
  [72]=>
  int(72)
  [73]=>
  int(73)
  [74]=>
  int(74)
  [75]=>
  int(75)
  [76]=>
  int(76)
  [77]=>
  int(77)
  [78]=>
  int(78)
  [79]=>
  int(79)
  [80]=>
  int(80)
  [81]=>
  int(81)
  [82]=>
  int(82)
  [83]=>
  int(83)
  [84]=>
  int(84)
  [85]=>
  int(85)
  [86]=>
  int(86)
  [87]=>
  int(87)
  [88]=>
  int(88)
  [89]=>
  int(89)
  [90]=>
  int(90)
  [91]=>
  int(91)
  [92]=>
  int(92)
  [93]=>
  int(93)
  [94]=>
  int(94)
  [95]=>
  int(95)
  [96]=>
  int(96)
  [97]=>
  int(97)
  [98]=>
  int(98)
  [99]=>
  int(99)
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2012/06/shellsort-php-implementation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Insertion sort algorithm PHP implementation</title>
		<link>http://blog.richardknop.com/2012/06/insertion-sort-algorithm-php-implementation/</link>
		<comments>http://blog.richardknop.com/2012/06/insertion-sort-algorithm-php-implementation/#comments</comments>
		<pubDate>Tue, 19 Jun 2012 17:01:38 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Insertion sort]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=772</guid>
		<description><![CDATA[This is a third blog post in my challenge to cover as many sorting algorithms as possible, implement them in PHP (without using any array functions) and then benchmark their performance with different inputs. Could be interesting. Insertion sort is another common sorting algorithm. To explain how it works, try to imagine this. There&#8217;s a [...]]]></description>
				<content:encoded><![CDATA[<p>This is a third blog post in my challenge to cover as many sorting algorithms as possible, implement them in PHP (without using any array functions) and then benchmark their performance with different inputs. Could be interesting.</p>
<p>Insertion sort is another common sorting algorithm. To explain how it works, try to imagine this. There&#8217;s a couple of cards on the table and you want to sort them in a correct order. You will pick a card from the table (based on any criteria, it doesn&#8217;t really matter, you can just pick the cards up randomly) and put it in your left hand at a correct position. To determine the correct position, you will compare it with every other card in your left hand starting from the right. This is a similar algorithm you might unconsciously use when playing cards with your friends.</p>
<p>Example:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$table</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="nu0">7</span><span class="sy0">,</span> <span class="nu0">3</span><span class="sy0">,</span> <span class="nu0">9</span><span class="sy0">,</span> <span class="nu0">6</span><span class="sy0">,</span> <span class="nu0">5</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">2</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">8</span><span class="sy0">,</span> <span class="nu0">4</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$leftHand</span> <span class="sy0">=</span> insertionSort<span class="br0">&#40;</span><span class="re1">$table</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re1">$leftHand</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> insertionSort<span class="br0">&#40;</span><span class="kw3">array</span> <span class="re1">$table</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">    <span class="re1">$leftHand</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">    <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$table</span> <span class="kw1">as</span> <span class="re1">$card</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="nu0">0</span> <span class="sy0">===</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$leftHand</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">            <span class="re1">$leftHand</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$card</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">        <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">            <span class="re1">$insertedCard</span> <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">            <span class="re1">$reindexedLeftHand</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">            <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$leftHand</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="sy0">&#8211;</span><span class="re1">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">                <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$card</span> <span class="sy0">&gt;=</span> <span class="re1">$leftHand</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">                    <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$j</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$j</span> <span class="sy0">&lt;=</span> <span class="re1">$i</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$j</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">                        <span class="re1">$reindexedLeftHand</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$leftHand</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">                    <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">                    <span class="re1">$reindexedLeftHand</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$card</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">                    <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$j</span> <span class="sy0">=</span> <span class="re1">$i</span><span class="nu0">+1</span><span class="sy0">;</span> <span class="re1">$j</span> <span class="sy0">&lt;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$leftHand</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re1">$j</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">                        <span class="re1">$reindexedLeftHand</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="nu0">+1</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$leftHand</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">                    <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">                    <span class="re1">$insertedCard</span> <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">                    <span class="kw1">break</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">                <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">            <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">            <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw2">false</span> <span class="sy0">===</span> <span class="re1">$insertedCard</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">                <span class="re1">$reindexedLeftHand</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$card</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">                <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$leftHand</span> <span class="kw1">as</span> <span class="re1">$cardInLeftHand</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">                    <span class="re1">$reindexedLeftHand</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$cardInLeftHand</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">                <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">            <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">            <span class="re1">$leftHand</span> <span class="sy0">=</span> <span class="re1">$reindexedLeftHand</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">        <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">    <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">    <span class="kw1">return</span> <span class="re1">$leftHand</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Will result in:</p>
<pre>array(10) {
  [0]=&gt;
  int(0)
  [1]=&gt;
  int(1)
  [2]=&gt;
  int(2)
  [3]=&gt;
  int(3)
  [4]=&gt;
  int(4)
  [5]=&gt;
  int(5)
  [6]=&gt;
  int(6)
  [7]=&gt;
  int(7)
  [8]=&gt;
  int(8)
  [9]=&gt;
  int(9)
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2012/06/insertion-sort-algorithm-php-implementation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
