<?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>blog.alumican.net &#187; PHP</title>
	<atom:link href="http://blog.alumican.net/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.alumican.net</link>
	<description>日々の記憶と記録とActionScript とその周辺</description>
	<lastBuildDate>Tue, 20 Jul 2010 16:21:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>オブジェクトをマージするPHPのメモ</title>
		<link>http://blog.alumican.net/2009/04/21_233107</link>
		<comments>http://blog.alumican.net/2009/04/21_233107#comments</comments>
		<pubDate>Tue, 21 Apr 2009 14:31:07 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=641</guid>
		<description><![CDATA[[{a:"1", b:"2", c:"3"} , {d:"hoge", a:"fuga"}] のような構造体の配列をマージして {a:&#8221;fuga&#8221;, b:&#8221;2&#8243;, c:&# [...]]]></description>
			<content:encoded><![CDATA[<p>[{a:"1", b:"2", c:"3"} , {d:"hoge", a:"fuga"}] のような構造体の配列をマージして {a:&#8221;fuga&#8221;, b:&#8221;2&#8243;, c:&#8221;3&#8243;, d:&#8221;hoge&#8221;} としてくれるPHPコードのメモ。変数名がバッティングした場合は後の方に上書きされる。入れ子の構造体には使えない、多分。<br />
<span id="more-641"></span></p>
<pre><code>&lt;?php
function merge_object($obj_ary) {

    $joined = array();
    $n = count($obj_ary);

    if ($n == 0) return "{}";
    if ($n == 1) return $obj_ary[0];

    for ($i = 0; $i < $n; ++$i) {

        $o = $obj_ary[$i];
        $o = preg_replace("/&amp;#8217;|&amp;#8242;|&amp;#8221;|&amp;#8243;/", "\"", $o);

        //適当
        preg_match("/\s*[{]\s*(.*)\s*[}]\s*/", stripslashes($o), $match);
        $pairs = preg_split("/\s*,\s*/", $match[1]);

        foreach($pairs as $v) {
            if (strcmp($v, "") == 0) continue;

            $pair = preg_split("/\s*:\s*/", $v);
            $joined[$pair[0]] = $pair[1];
        }
    }

    while(list($key, $value) = each($joined)) {
        $result .= $key.":".$value.",";
    }
    $result = "{".substr($result, 0, strlen($result) - 1)."}";

    return $result;
}

//間にスペースが入っても平気
$test[0] = '{aaa:"bbb"  ,  ccc  :  "ddd"  ,  a  :  "b"}';
$test[1] = '{    aaa:"123",  eee:"fff"  }';

print merge_object($test);
?&gt;</code></code></pre>
<p>出力結果</p>
<pre><code>{aaa:"123",ccc:"ddd",a:"b",eee:"fff" }</code></pre>
<p>なんかところどころに半角スペースが残ってるのが気になる、まあいいけど。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/04/21_233107/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
