配列の結合を仕様としたところ、phpの関数では意図した結合が出来ない場合があります。

下記のような配列を結合しようとした場合
array_merge_recursive()関数を利用すると、既にキーに値が入っている場合、値が追加されてしまいます。
ということで、いろいろ調べているとcakeフレームワークで使えそうな関数が出てきたので、拝借しました。

http://book.cakephp.org/ja/compare/679/merge
この関数は PHP の array_merge と array_merge_recursive を混ぜ合わせたものと見なすことができます。 array_merge と異なる点は、もし配列のキーが他の配列に含まれていたら、再帰的に振舞うことです。


--------------------------------------------------
結合もとデータ
--------------------------------------------------

Array
(
[pc] => Array
(
[layout] => Array
(
[file] => secondtopDefault
)

[css] => Array
(
[file] => secondtop
)

[js] => Array
(
[file] => Array
(
[0] => scroll
[1] => rollover
)

)

[header] => Array
(
[file] => secondtopContents
)

[footer] => Array
(
[file] => secondtop
)

[menu] => Array
(
[file] => secondtop
)

[subContents1] => Array
(
[file] => index
)

)

[mobile] => Array
(
[layout] => Array
(
[file] =>
)

[header] => Array
(
[file] => secondtopContents
)

[footer] => Array
(
[file] => secondtopTop
)

[menu] => Array
(
[file] => secondtopTop
)

[css] => Array
(
[file] =>
)

[subContents1] => Array
(
[file] =>
)

)

)

--------------------------------------------------
結合データ
--------------------------------------------------
Array
(
[pc] => Array
(
[layout] => Array
(
[file] => default
)

)

)

--------------------------------------------------
マージ array_merge_recursive()
--------------------------------------------------
Array
(
[pc] => Array
(
[layout] => Array
(
[file] => Array
(
[0] => secondtopDefault
[1] => default
←ここがうざい。。
)

)

[css] => Array
(
[file] => secondtop
)

[js] => Array
(
[file] => Array
(
[0] => scroll
[1] => rollover
)

)

[header] => Array
(
[file] => secondtopContents
)

[footer] => Array
(
[file] => secondtop
)

[menu] => Array
(
[file] => secondtop
)

[subContents1] => Array
(
[file] => index
)

)

[mobile] => Array
(
[layout] => Array
(
[file] =>
)

[header] => Array
(
[file] => secondtopContents
)

[footer] => Array
(
[file] => secondtopTop
)

[menu] => Array
(
[file] => secondtopTop
)

[css] => Array
(
[file] =>
)

[subContents1] => Array
(
[file] =>
)

)

)

--------------------------------------------------
マージ(cakeSet::merge)
--------------------------------------------------
Array
(
[pc] => Array
(
[layout] => Array
(
[file] => default
)

[css] => Array
(
[file] => secondtop
)

[js] => Array
(
[file] => Array
(
[0] => scroll
[1] => rollover
)

)

[header] => Array
(
[file] => secondtopContents
)

[footer] => Array
(
[file] => secondtop
)

[menu] => Array
(
[file] => secondtop
)

[subContents1] => Array
(
[file] => index
)

)

[mobile] => Array
(
[layout] => Array
(
[file] =>
)

[header] => Array
(
[file] => secondtopContents
)

[footer] => Array
(
[file] => secondtopTop
)

[menu] => Array
(
[file] => secondtopTop
)

[css] => Array
(
[file] =>
)

[subContents1] => Array
(
[file] =>
)

)

)









■参考

--------------------------------------------------
+結合
--------------------------------------------------
Array
(
[pc] => Array
(
[layout] => Array
(
[file] => secondtopDefault
)

[css] => Array
(
[file] => secondtop
)

[js] => Array
(
[file] => Array
(
[0] => scroll
[1] => rollover
)

)

[header] => Array
(
[file] => secondtopContents
)

[footer] => Array
(
[file] => secondtop
)

[menu] => Array
(
[file] => secondtop
)

[subContents1] => Array
(
[file] => index
)

)

[mobile] => Array
(
[layout] => Array
(
[file] =>
)

[header] => Array
(
[file] => secondtopContents
)

[footer] => Array
(
[file] => secondtopTop
)

[menu] => Array
(
[file] => secondtopTop
)

[css] => Array
(
[file] =>
)

[subContents1] => Array
(
[file] =>
)

)

)


■99%借り物のソースですが。。




class cakeSet{
/**
* Deprecated
*
*/
var $value = array();
/**
* This function can be thought of as a hybrid between PHP's array_merge and array_merge_recursive. The difference
* to the two is that if an array key contains another array then the function behaves recursive (unlike array_merge)
* but does not do if for keys containing strings (unlike array_merge_recursive). See the unit test for more information.
*
* Note: This function will work with an unlimited amount of arguments and typecasts non-array parameters into arrays.
*
* @param array $arr1 Array to be merged
* @param array $arr2 Array to merge with
* @return array Merged array
* @access public
* @static
*/
static function merge($arr1, $arr2 = null) {
$args = func_get_args();

$r = (array)current($args);
while (($arg = next($args)) !== false) {
foreach ((array)$arg as $key => $val) {
if (is_array($val) && isset($r[$key]) && is_array($r[$key])) {
$r[$key] = cakeSet::merge($r[$key], $val);
} elseif (is_int($key)) {
$r[] = $val;
} else {
$r[$key] = $val;
}
}
}
return $r;
}

}

?>
----------------------------------------------------------------
RSSの読み込み(RSSリーダー)
----------------------------------------------------------------

RSSの読み込みはpearのxml_rssを利用して行います。

以下のコマンドでxml_rssをインストールしようとしたところエラーが発生してインストールできなかったので、ちょっとつまづいた。。

pear install xml_rss

結局↓でうまくインストールできました
pear install xml_rss-beta

ついでに他もインストールしておきました。
pear install xml_tree
pear install XML_Parser
pear install xml_rss-beta

----------------------------------------
読み込みのサンプルコード
----------------------------------------


/**
* RSSファイルへのURIをコンストラクタの引数に渡す
*/

include_once('XML/RSS.php');
$rss = new XML_RSS("http://feedblog.ameba.jp/rss/ameblo/ringopanda/rss20.xml");

/**
* RSSファイルをパースする
*/
$rss->parse();

/**
* getItemsメソッドを使用して全item要素を取得し、表示する
*/
$this->newsRss = $rss->getItems();

----------------------------------------------------------------
RSSの作成
----------------------------------------------------------------
PHPでRSS配信をする場合、いろいろめんどくさそうなのでライブラリを利用することにしました。
今回はfeedcreatorを利用してRSSの配信を試みます。


feedcreatorを利用してRSSを配信しようとしたところ、あまり見ない文字化けが発生していたので対応をした。


【feedcreatorの文字化け対応】
feedcreator.class.php(FeedCreator class v1.7.2)

497行目
var $encoding = "ISO-8859-1";

var $encoding = "utf-8";
1164行目
$this->encoding = "ISO-8859-15";

$this->encoding = "utf-8";