<?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>Richard Jones, Esq. &#187; php</title>
	<atom:link href="http://www.metabrew.com/article/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.metabrew.com</link>
	<description>Erlang, PHP, C, C++, Java, PostgreSQL, MySQL, Hadoop, Linux, awk, bash, sed, grep, screen, vim, irc, ssh etc...</description>
	<lastBuildDate>Sun, 20 Dec 2009 18:59:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Reading Serialized PHP Objects from Erlang</title>
		<link>http://www.metabrew.com/article/reading-serialized-php-objects-from-erlang/</link>
		<comments>http://www.metabrew.com/article/reading-serialized-php-objects-from-erlang/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 22:42:20 +0000</pubDate>
		<dc:creator>RJ</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.metabrew.com/wordpress/?p=15</guid>
		<description><![CDATA[I started writing some Erlang recently. The vast majority of data I need to access from Erlang resides in cached, serialized php objects. Here&#8217;s what I came up with to turn a serialized php object into a sort of nested Erlang proplist thing. &#60;?php $s = array&#40;123, &#8216;hello&#8217;, 3.14, array&#40;&#8216;a&#8217;=&#62;&#8216;foo&#8217;, &#8216;b&#8217;=&#62;&#8216;bar&#8217;&#41;&#41;; print serialize&#40;$s&#41;; ?&#62; This [...]]]></description>
			<content:encoded><![CDATA[<p>I started writing some Erlang recently. The vast majority of data I need to access from Erlang resides in cached, serialized php objects. Here&#8217;s what I came up with to turn a serialized php object into a sort of nested Erlang proplist thing. </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$s</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="nu0">123</span>, <span class="st0">&#8216;hello&#8217;</span>, <span class="nu0">3.14</span>, <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;a&#8217;</span>=&gt;<span class="st0">&#8216;foo&#8217;</span>, <span class="st0">&#8216;b&#8217;</span>=&gt;<span class="st0">&#8216;bar&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/print"><span class="kw3">print</span></a> <a href="http://www.php.net/serialize"><span class="kw3">serialize</span></a><span class="br0">&#40;</span><span class="re0">$s</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>This gives:</p>
<p><code>a:4:{i:0;i:123;i:1;s:5:"hello";i:2;d:3.14;i:3;a:2:{s:1:"a";s:3:"foo";s:1:"b";s:3:"bar";}}</code></p>
<p>It&#8217;s not hard to see how the (relatively undocumented) PHP serialization format works. Here&#8217;s what it becomes in Erlang:</p>
<p><code><br />
1&gt; php:unserialize("a:4:{i:0;i:123;i:1;s:5:\"hello\";i:2;d:3.14;i:3;a:2:{s:1:\"a\";s:3:\"foo\";s:1:\"b\";s:3:\"bar\";}}").</p>
<p>{[[{0,123},<br />
{1,&lt;&lt;"hello"&gt;&gt;},<br />
{2,3.14},<br />
{3,[{a,&lt;&lt;"foo"&gt;&gt;},{b,&lt;&lt;"bar"&gt;&gt;}]}]],<br />
[]}<br />
</code></p>
<p>Here&#8217;s what it does with objects:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> ExampleClass <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$id</span> = <span class="nu0">123</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$name</span> = <span class="st0">&quot;RJ&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$languages</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;php&#8217;</span>, <span class="st0">&#8216;erlang&#8217;</span>, <span class="st0">&#8216;etc&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$s</span> = <span class="kw2">new</span> ExampleClass<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$ser</span> = <a href="http://www.php.net/serialize"><span class="kw3">serialize</span></a><span class="br0">&#40;</span><span class="re0">$s</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/print"><span class="kw3">print</span></a> <a href="http://www.php.net/serialize"><span class="kw3">serialize</span></a><span class="br0">&#40;</span><span class="re0">$str</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p><code><br />
2&gt; php:unserialize("O:12:\"ExampleClass\":3:{s:2:\"id\";i:123;s:4:\"name\";s:2:\"RJ\";s:9:\"languages\";a:3:{i:0;s:3:\"php\";i:1;s:6:\"erlang\";i:2;s:3:\"etc\";}}").<br />
{[{class,"ExampleClass",<br />
         [{id,123},<br />
          {name,<<"RJ">>},<br />
          {languages,[{0,<<"php">>},<br />
                      {1,<<"erlang">>},<br />
                      {2,<<"etc">>}]}]}],<br />
 []}</code></p>
<p>Due to a combination of PHP&#8217;s &#8220;relaxed&#8221; type system, an old database abstraction library, and munging things in and out of memcached, we sometimes end up with numeric properties, such as &#8216;id&#8217;, represented as strings by PHP. To mitigate this, I ended up with some nasty code that forces certain properties to a predefined type (&#8220;id&#8221; is always an int, etc..). Yuk. Anyway, here&#8217;s the Erlang module:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">%</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">% Takes a serialized php object and turns it into an erlang data structure</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">%</span></div>
</li>
<li class="li1">
<div class="de1">-<span class="kw2">module</span><span class="br0">&#40;</span>php<span class="br0">&#41;</span>.</div>
</li>
<li class="li2">
<div class="de2">-<span class="kw2">author</span><span class="br0">&#40;</span><span class="st0">&#8216;Richard Jones &lt;rj at last.fm&gt;&#8217;</span><span class="br0">&#41;</span>.</div>
</li>
<li class="li1">
<div class="de1">-<span class="kw2">export</span><span class="br0">&#40;</span><span class="br0">&#91;</span>unserialize/<span class="nu0">1</span><span class="br0">&#93;</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">% Usage: &nbsp;{Result, Leftover} = php:unserialize(&#8230;)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">unserialize<span class="br0">&#40;</span><span class="re0">S</span><span class="br0">&#41;</span> when is_binary<span class="br0">&#40;</span><span class="re0">S</span><span class="br0">&#41;</span> &nbsp; &nbsp;-&gt; <span class="me1">unserialize</span><span class="br0">&#40;</span>binary_to_list<span class="br0">&#40;</span><span class="re0">S</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">unserialize<span class="br0">&#40;</span><span class="re0">S</span><span class="br0">&#41;</span> when is_list<span class="br0">&#40;</span><span class="re0">S</span><span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp;-&gt; <span class="me1">takeval</span><span class="br0">&#40;</span><span class="re0">S</span>, <span class="nu0">1</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">% Internal stuff</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">takeval<span class="br0">&#40;</span><span class="re0">Str</span>, <span class="re0">Num</span><span class="br0">&#41;</span> -&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">Parsed</span>, <span class="re0">Remains</span><span class="br0">&#125;</span> = takeval<span class="br0">&#40;</span><span class="re0">Str</span>, <span class="re0">Num</span>, <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span> lists:<span class="me2">reverse</span><span class="br0">&#40;</span><span class="re0">Parsed</span><span class="br0">&#41;</span>, <span class="re0">Remains</span> <span class="br0">&#125;</span>.</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">takeval<span class="br0">&#40;</span><span class="br0">&#91;</span>$<span class="br0">&#125;</span> | <span class="re0">Leftover</span><span class="br0">&#93;</span>, <span class="nu0">0</span>, <span class="re0">Acc</span><span class="br0">&#41;</span> &nbsp; &nbsp;-&gt; <span class="br0">&#123;</span><span class="re0">Acc</span>, <span class="re0">Leftover</span><span class="br0">&#125;</span>;</div>
</li>
<li class="li2">
<div class="de2">takeval<span class="br0">&#40;</span><span class="re0">Str</span>, <span class="nu0">0</span>, <span class="re0">Acc</span><span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; <span class="br0">&#123;</span><span class="re0">Acc</span>, <span class="re0">Str</span><span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">takeval<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="br0">&#93;</span>, <span class="nu0">0</span>, <span class="re0">Acc</span><span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -&gt; <span class="re0">Acc</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">takeval<span class="br0">&#40;</span><span class="re0">Str</span>, <span class="re0">Num</span>, <span class="re0">Acc</span><span class="br0">&#41;</span> -&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">Val</span>, <span class="re0">Rest</span><span class="br0">&#125;</span> = phpval<span class="br0">&#40;</span><span class="re0">Str</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="co1">%Lots of tracing if you enable this:</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">%io:format(&quot;\nState\n Str: ~s\n Num: ~w\n Acc:~w\n&quot;, [Str,Num,Acc]),</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">%io:format(&quot;-Val: ~w\n-Rest: ~s\n\n&quot;,[Val, Rest]),</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; takeval<span class="br0">&#40;</span><span class="re0">Rest</span>, <span class="re0">Num</span><span class="nu0">-1</span>, <span class="br0">&#91;</span><span class="re0">Val</span> | <span class="re0">Acc</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">%</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">% Parse induvidual php values.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">% a &quot;phpval&quot; here is T:val; where T is the type code for int, object, array etc..</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">%</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">% Simple ones:</span></div>
</li>
<li class="li1">
<div class="de1">phpval<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; <span class="br0">&#91;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">phpval<span class="br0">&#40;</span><span class="br0">&#91;</span> $<span class="br0">&#125;</span> | <span class="re0">Rest</span> <span class="br0">&#93;</span><span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -&gt; <span class="me1">phpval</span><span class="br0">&#40;</span><span class="re0">Rest</span><span class="br0">&#41;</span>; &nbsp; &nbsp;<span class="co1">% skip }</span></div>
</li>
<li class="li1">
<div class="de1">phpval<span class="br0">&#40;</span><span class="br0">&#91;</span>$<span class="re0">N</span>,$;|<span class="re0">Rest</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; <span class="br0">&#123;</span>null, <span class="re0">Rest</span><span class="br0">&#125;</span>; &nbsp; &nbsp;<span class="co1">% null</span></div>
</li>
<li class="li1">
<div class="de1">phpval<span class="br0">&#40;</span><span class="br0">&#91;</span>$b,$:,$<span class="nu0">1</span>,$; | <span class="re0">Rest</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &nbsp; &nbsp;-&gt; <span class="br0">&#123;</span>true, <span class="re0">Rest</span><span class="br0">&#125;</span>; &nbsp; &nbsp;<span class="co1">% true</span></div>
</li>
<li class="li2">
<div class="de2">phpval<span class="br0">&#40;</span><span class="br0">&#91;</span>$b,$:,$<span class="nu0">0</span>,$; | <span class="re0">Rest</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &nbsp; &nbsp;-&gt; <span class="br0">&#123;</span>false, <span class="re0">Rest</span><span class="br0">&#125;</span>; &nbsp; <span class="co1">% false</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">% r seems to be a recursive reference to something, represented as an int.</span></div>
</li>
<li class="li1">
<div class="de1">phpval<span class="br0">&#40;</span><span class="br0">&#91;</span>$r, $: | <span class="re0">Rest</span><span class="br0">&#93;</span><span class="br0">&#41;</span> -&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">RefNum</span>, <span class="br0">&#91;</span>$; | <span class="re0">Rest1</span><span class="br0">&#93;</span><span class="br0">&#125;</span> = string:<span class="me2">to_integer</span><span class="br0">&#40;</span><span class="re0">Rest</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="br0">&#123;</span>php_ref, <span class="re0">RefNum</span><span class="br0">&#125;</span>, <span class="re0">Rest1</span><span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">% int</span></div>
</li>
<li class="li1">
<div class="de1">phpval<span class="br0">&#40;</span><span class="br0">&#91;</span>$i, $: | <span class="re0">Rest</span><span class="br0">&#93;</span><span class="br0">&#41;</span>-&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">Num</span>, <span class="br0">&#91;</span>$; | <span class="re0">Rest1</span><span class="br0">&#93;</span><span class="br0">&#125;</span> = string:<span class="me2">to_integer</span><span class="br0">&#40;</span><span class="re0">Rest</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">Num</span>, <span class="re0">Rest1</span><span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">% double / float</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">% NB: php floats can be ints, and string:to_float doesn&#8217;t like that.</span></div>
</li>
<li class="li1">
<div class="de1">phpval<span class="br0">&#40;</span><span class="re0">X</span>=<span class="br0">&#91;</span>$d, $: | <span class="re0">Rest</span><span class="br0">&#93;</span><span class="br0">&#41;</span> -&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">Num</span>, <span class="br0">&#91;</span>$; | <span class="re0">Rest1</span><span class="br0">&#93;</span><span class="br0">&#125;</span> = <span class="kw1">case</span> string:<span class="me2">to_float</span><span class="br0">&#40;</span><span class="re0">Rest</span><span class="br0">&#41;</span> <span class="kw1">of</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>error, no_float<span class="br0">&#125;</span> -&gt; <span class="me1">string</span>:<span class="me2">to_integer</span><span class="br0">&#40;</span><span class="re0">Rest</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">N</span>,<span class="re0">R</span><span class="br0">&#125;</span> -&gt; <span class="br0">&#123;</span><span class="re0">N</span>,<span class="re0">R</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">end</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">Num</span>, <span class="re0">Rest1</span><span class="br0">&#125;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">% string</span></div>
</li>
<li class="li1">
<div class="de1">phpval<span class="br0">&#40;</span><span class="br0">&#91;</span>$s, $: | <span class="re0">Rest</span><span class="br0">&#93;</span><span class="br0">&#41;</span> -&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">Len</span>, <span class="br0">&#91;</span>$: | <span class="re0">Rest1</span><span class="br0">&#93;</span><span class="br0">&#125;</span> =string:<span class="me2">to_integer</span><span class="br0">&#40;</span><span class="re0">Rest</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">S</span> = list_to_binary<span class="br0">&#40;</span>string:<span class="me2">sub_string</span><span class="br0">&#40;</span><span class="re0">Rest1</span>, <span class="nu0">2</span>, <span class="re0">Len</span><span class="nu0">+1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">S</span>, lists:<span class="me2">nthtail</span><span class="br0">&#40;</span><span class="re0">Len</span><span class="nu0">+3</span>, <span class="re0">Rest1</span><span class="br0">&#41;</span><span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">% array</span></div>
</li>
<li class="li1">
<div class="de1">phpval<span class="br0">&#40;</span><span class="br0">&#91;</span>$a, $: | <span class="re0">Rest</span><span class="br0">&#93;</span><span class="br0">&#41;</span> -&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">NumEntries</span>, <span class="br0">&#91;</span>$:, $<span class="br0">&#123;</span> | <span class="re0">Rest1</span><span class="br0">&#93;</span><span class="br0">&#125;</span> =string:<span class="me2">to_integer</span><span class="br0">&#40;</span><span class="re0">Rest</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">Array</span>, <span class="re0">Rest2</span><span class="br0">&#125;</span> = takeval<span class="br0">&#40;</span><span class="re0">Rest1</span>, <span class="re0">NumEntries</span>*<span class="nu0">2</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span>arraytidy<span class="br0">&#40;</span><span class="re0">Array</span><span class="br0">&#41;</span>, <span class="re0">Rest2</span><span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">% object O:4:\&quot;User\&quot;:53:{</span></div>
</li>
<li class="li1">
<div class="de1">phpval<span class="br0">&#40;</span><span class="br0">&#91;</span>$<span class="re0">O</span>, $: | <span class="re0">Rest</span><span class="br0">&#93;</span><span class="br0">&#41;</span> -&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">ClassnameLen</span>, <span class="br0">&#91;</span>$: | <span class="re0">Rest1</span><span class="br0">&#93;</span><span class="br0">&#125;</span> =string:<span class="me2">to_integer</span><span class="br0">&#40;</span><span class="re0">Rest</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">% Rest1: &quot;classname&quot;:NumEnt:{..</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">Classname</span> = string:<span class="me2">sub_string</span><span class="br0">&#40;</span><span class="re0">Rest1</span>, <span class="nu0">2</span>, <span class="re0">ClassnameLen</span><span class="nu0">+1</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">Rest1b</span> = lists:<span class="me2">nthtail</span><span class="br0">&#40;</span><span class="re0">ClassnameLen</span><span class="nu0">+3</span>, <span class="re0">Rest1</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">NumEntries</span>, <span class="br0">&#91;</span>$:, $<span class="br0">&#123;</span> | <span class="re0">Rest2</span><span class="br0">&#93;</span><span class="br0">&#125;</span> = string:<span class="me2">to_integer</span><span class="br0">&#40;</span><span class="re0">Rest1b</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="re0">Classvals</span>, <span class="re0">Rest3</span><span class="br0">&#125;</span> = takeval<span class="br0">&#40;</span><span class="re0">Rest2</span>, <span class="re0">NumEntries</span>*<span class="nu0">2</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="br0">&#123;</span>class, <span class="re0">Classname</span>, arraytidy<span class="br0">&#40;</span><span class="re0">Classvals</span><span class="br0">&#41;</span><span class="br0">&#125;</span>, <span class="re0">Rest3</span><span class="br0">&#125;</span>.</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">%%</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">%% Helpers:</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">%%</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">% convert [ k1,v1,k2,v2,k3,v3 ] into [ {k1,v2}, {k2,v2}, {k3,v3} ]</span></div>
</li>
<li class="li1">
<div class="de1">arraytidy<span class="br0">&#40;</span><span class="re0">L</span><span class="br0">&#41;</span> -&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="me1">lists</span>:<span class="me2">reverse</span><span class="br0">&#40;</span>lists:<span class="me2">foldl</span><span class="br0">&#40;</span>fun arraytidy/<span class="nu0">2</span>, <span class="br0">&#91;</span><span class="br0">&#93;</span>, <span class="re0">L</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">arraytidy<span class="br0">&#40;</span><span class="re0">El</span>, <span class="br0">&#91;</span><span class="br0">&#123;</span>key___partial, <span class="re0">K</span><span class="br0">&#125;</span> | <span class="re0">L</span><span class="br0">&#93;</span><span class="br0">&#41;</span> -&gt; <span class="br0">&#91;</span><span class="br0">&#123;</span>atomize<span class="br0">&#40;</span><span class="re0">K</span><span class="br0">&#41;</span>, <span class="re0">El</span><span class="br0">&#125;</span> | <span class="re0">L</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">arraytidy<span class="br0">&#40;</span><span class="re0">El</span>, <span class="re0">L</span><span class="br0">&#41;</span> -&gt; <span class="br0">&#91;</span><span class="br0">&#123;</span>key___partial, <span class="re0">El</span><span class="br0">&#125;</span> | <span class="re0">L</span><span class="br0">&#93;</span>.</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">%% Make properties or keys into atoms</span></div>
</li>
<li class="li1">
<div class="de1">atomize<span class="br0">&#40;</span><span class="re0">K</span><span class="br0">&#41;</span> when is_binary<span class="br0">&#40;</span><span class="re0">K</span><span class="br0">&#41;</span> -&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="me1">atomize</span><span class="br0">&#40;</span>binary_to_list<span class="br0">&#40;</span><span class="re0">K</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">atomize<span class="br0">&#40;</span><span class="re0">K</span><span class="br0">&#41;</span> when is_list<span class="br0">&#40;</span><span class="re0">K</span><span class="br0">&#41;</span> -&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="me1">list_to_atom</span><span class="br0">&#40;</span>string:<span class="me2">to_lower</span><span class="br0">&#40;</span><span class="re0">K</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">atomize<span class="br0">&#40;</span><span class="re0">K</span><span class="br0">&#41;</span> -&gt; <span class="re0">K</span>.</div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.metabrew.com/article/reading-serialized-php-objects-from-erlang//feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
