<?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"
	>

<channel>
	<title>エクスギア　Blog</title>
	<atom:link href="http://www.exgear.jp/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.exgear.jp/blog</link>
	<description>エクスギアの技術系blog</description>
	<pubDate>Thu, 08 Oct 2009 03:59:51 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>ja</language>
			<item>
		<title>1行で書けるPHPファイルを直接実行させない方法</title>
		<link>http://www.exgear.jp/blog/2009/10/one-liner-not-torunning-php-directly/</link>
		<comments>http://www.exgear.jp/blog/2009/10/one-liner-not-torunning-php-directly/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 04:39:05 +0000</pubDate>
		<dc:creator>maeda</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://www.exgear.jp/blog/?p=455</guid>
		<description><![CDATA[Webサーバーのウェブルート以下に、クラスファイルやincludeされることが前提となっているライブラリファイルのような直接実行されることを意図していないPHPファイルを置いてしまった場合、意図していなくてもブラウザから [...]]]></description>
		<wfw:commentRss>http://www.exgear.jp/blog/2009/10/one-liner-not-torunning-php-directly/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP5 配列をメソッドチェインで再帰処理するクラス</title>
		<link>http://www.exgear.jp/blog/2009/10/php5_array_map_recursive_class/</link>
		<comments>http://www.exgear.jp/blog/2009/10/php5_array_map_recursive_class/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 00:53:49 +0000</pubDate>
		<dc:creator>minoura</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Tips]]></category>

		<category><![CDATA[PHP5]]></category>

		<category><![CDATA[配列処理]]></category>

		<guid isPermaLink="false">http://www.exgear.jp/blog/?p=444</guid>
		<description><![CDATA[CakePHPを使っていると、データ構造が多階層の配列で管理されていることが多く、一括で処理をしたい場合などに度々再帰処理を実装することがあります。
通常であれば、array_map系の関数を使って再帰的に処理を記述することになりますが、

毎回array_mapを使うのは面倒だし、もっと簡潔に記述したい
個別のグローバル関数・各メソッドを連続して簡単に利用したい

という理由で、以下のように記述できるクラスを作成しました。
（クラスのソースコードは最後に記述しています）
PLAIN TEXT
PHP:




// $arrの全ての要素にtrimと半角カナ変換を実施


ArrayMap::create&#40;$arr&#41;-&#62;trim&#40;&#41;-&#62;mb_convert_kana&#40;'KV'&#41;;


&#160;


// $arrの全ての要素に「先頭：」という文字を追加


ArrayMap::create&#40;$arr&#41;-&#62;sprintf&#40;'先頭：%s'&#41;; 






※PHP5のマジックメソッドを使って実現していますので、PHP4系では使えません
※通常の手続き型で実装する場合は「array_walk_recursive」「array_map recursive」などで検索するといろいろ参考情報があります。

利用メリット
あくまで個人的な意見ですが、、　

PHPの標準関数をそのまま利用できる
自作関数やメソッドを作成する際に再帰処理の考慮が不要になり、単純な処理だけを作成→利用時に合成とすることができる（より再利用できる）
ソース可読性の向上

利用書式
１．グローバル関数を実行する場合

ArrayMap::create(配列変数)->グローバル関数([引数1],[引数2],・・・)
->次の関数・メソッド

例：配列$arrの全ての要素にtrimと半角カナ変換を実施
PLAIN TEXT
PHP:




ArrayMap::create&#40;$arr&#41;-&#62;trim&#40;&#41;-&#62;mb_convert_kana&#40;'KV'&#41;; 






２．静的クラスメソッドを実行する場合

ArrayMap::create(配列変数)->call(array(静的クラス名,メソッド名),[引数1],[引数2],・・・)
->次の関数・メソッド

例：配列$arrの全ての要素にInflectorクラスのcamelizeメソッドを実施(引数無し)
PLAIN TEXT
PHP:




ArrayMap::create&#40;$arr&#41;-&#62;call&#40;array&#40;'Inflector', 'camelize'&#41;&#41;; 






３．オブジェクトメソッドを実行する場合

ArrayMap::create(配列変数)->call(array(オブジェクト変数,メソッド名),[引数1],[引数2],・・・)
->次の関数・メソッド

例：配列$arrの全ての要素に$thisオブジェクトのconvメソッドを実施(引数1:'a'、引数2:'b')
PLAIN TEXT
PHP:




ArrayMap::create&#40;$arr&#41;-&#62;call&#40;array&#40;$this, 'conv'&#41;, 'a', 'b'&#41;; 






※呼び出される関数・メソッドは第１引数に処理をする値、第２引数以降に必要であれば引数を設定します。
※ArrayMapクラスから呼び出す際は各要素が自動的に第１引数に設定されるので、第２引数以降を呼び出し時に指定します
※標準関数のstr_replace()やsprintf()などは処理を行う値が最後の引数になっています。
これらはArrayMapクラス内で定義しておけば自動的に最後の引数として設定します。
呼び出し時に動的に最後の引数として要素を渡したい場合は、実行前にp()メソッドを実行する必要があります。
PLAIN TEXT
PHP:




ArrayMap::create&#40;$arr&#41;-&#62;trim&#40;&#41;-&#62;p&#40;&#41;-&#62;要素を最後の引数とする関数&#40;&#41;; 






CakePHPでの利用
前半にも記述しましたが、CakePHPでは各データが配列で管理されている為、
以下のような部分で適用できるかと思います。（すいません、未検証です）

コントローラーのbeforeFilterで入力値($this->dataや$this->params)の変換（trimや改行・文字コード統一など）
モデルのbeforeValidateなどで値の変換（trimや最大長による切り捨て）
ビュー内やコントローラーのbeforeRenderなどで値のエスケープ処理

ソースコード
ダウンロード
PLAIN TEXT
PHP:




&#60;?php


#########################################################################


/**


 * 配列要素操作クラス


 */


#########################################################################


class ArrayMap &#123;


&#160; &#160; protected $value;


&#160; &#160; protected $arg_push&#160; = false;


&#160; &#160; protected $is_call&#160; &#160;= false;


&#160; &#160; 


&#160; &#160; // 値を最後の引数とする関数を追加する


&#160; &#160; public static $auto_push_method&#160; = array&#40; 'str_replace', 'preg_replace', 'sprintf', 'date'&#41;;


&#160; &#160; 


&#160; &#160; [...]]]></description>
		<wfw:commentRss>http://www.exgear.jp/blog/2009/10/php5_array_map_recursive_class/feed/</wfw:commentRss>
		</item>
		<item>
		<title>munin　mysql_isam_space_ の division by zero エラー対策</title>
		<link>http://www.exgear.jp/blog/2009/09/munin-mysql_isam_space_-%e3%81%ae-division-by-zero-%e3%82%a8%e3%83%a9%e3%83%bc%e5%af%be%e7%ad%96/</link>
		<comments>http://www.exgear.jp/blog/2009/09/munin-mysql_isam_space_-%e3%81%ae-division-by-zero-%e3%82%a8%e3%83%a9%e3%83%bc%e5%af%be%e7%ad%96/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 11:01:30 +0000</pubDate>
		<dc:creator>okamoto</dc:creator>
		
		<category><![CDATA[munin]]></category>

		<category><![CDATA[システム管理]]></category>

		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.exgear.jp/blog/?p=434</guid>
		<description><![CDATA[CentOSに5.xにrpmforgeからmuninをインストールしましたが、mysql_isam_space_がエラーを吐きます。

Illegal division by zero at /etc/munin/plu [...]]]></description>
		<wfw:commentRss>http://www.exgear.jp/blog/2009/09/munin-mysql_isam_space_-%e3%81%ae-division-by-zero-%e3%82%a8%e3%83%a9%e3%83%bc%e5%af%be%e7%ad%96/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Symfony TemplatingをCakePHPで使ってみる</title>
		<link>http://www.exgear.jp/blog/2009/09/cakephp-with-symfony-templating/</link>
		<comments>http://www.exgear.jp/blog/2009/09/cakephp-with-symfony-templating/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 18:28:48 +0000</pubDate>
		<dc:creator>maeda</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Symfony Components]]></category>

		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.exgear.jp/blog/?p=411</guid>
		<description><![CDATA[CakePHPでSymfony Templatingを使ってみる
前回はSymfony Templatingを単独で利用したり、Smartyと連動させてみました。
次に何をしようかと思い、現在のsymfonyで組み込んで [...]]]></description>
		<wfw:commentRss>http://www.exgear.jp/blog/2009/09/cakephp-with-symfony-templating/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Symfony Templatingを使ってみませんか？</title>
		<link>http://www.exgear.jp/blog/2009/09/first-impression-of-symfony-templating/</link>
		<comments>http://www.exgear.jp/blog/2009/09/first-impression-of-symfony-templating/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 18:37:54 +0000</pubDate>
		<dc:creator>maeda</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Symfony Components]]></category>

		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.exgear.jp/blog/?p=379</guid>
		<description><![CDATA[Symfony Componentsというのをご存知でしょうか？その名前のとおり、あのPHPのフレームワークで有名なsymfonyに関係するコンポーネントなのですが、symfonyの次期バージョンであるSymfony2で [...]]]></description>
		<wfw:commentRss>http://www.exgear.jp/blog/2009/09/first-impression-of-symfony-templating/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Gitで更新時にメールを送信する</title>
		<link>http://www.exgear.jp/blog/2009/08/git%e3%81%a7%e6%9b%b4%e6%96%b0%e6%99%82%e3%81%ab%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%92%e9%80%81%e4%bf%a1%e3%81%99%e3%82%8b/</link>
		<comments>http://www.exgear.jp/blog/2009/08/git%e3%81%a7%e6%9b%b4%e6%96%b0%e6%99%82%e3%81%ab%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%92%e9%80%81%e4%bf%a1%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 11:05:11 +0000</pubDate>
		<dc:creator>maeda</dc:creator>
		
		<category><![CDATA[git]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[アプリケーション]]></category>

		<guid isPermaLink="false">http://www.exgear.jp/blog/?p=373</guid>
		<description><![CDATA[社内のソースバージョン管理でgitも使ってみようということで、開発メンバーが利用できるようにgit環境を構築しています。
subversionで管理しているときは、commit時にcommitの概要をMLにメールを送信す [...]]]></description>
		<wfw:commentRss>http://www.exgear.jp/blog/2009/08/git%e3%81%a7%e6%9b%b4%e6%96%b0%e6%99%82%e3%81%ab%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%92%e9%80%81%e4%bf%a1%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DoctrineのfindBy,findOneByにorder byを追加する方法</title>
		<link>http://www.exgear.jp/blog/2009/07/doctrine%e3%81%aefindbyfindoneby%e3%81%aborder-by%e3%82%92%e8%bf%bd%e5%8a%a0%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/</link>
		<comments>http://www.exgear.jp/blog/2009/07/doctrine%e3%81%aefindbyfindoneby%e3%81%aborder-by%e3%82%92%e8%bf%bd%e5%8a%a0%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 08:40:39 +0000</pubDate>
		<dc:creator>maeda</dc:creator>
		
		<category><![CDATA[Doctrine]]></category>

		<category><![CDATA[未分類]]></category>

		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.exgear.jp/blog/?p=366</guid>
		<description><![CDATA[symfonyではDoctrineが実質的な標準ORMになりました。
まだまだ使いきれていないのですが、機能が豊富にあるため知っているのと知らないのではかなりの差がでてきます。
今回は知っていると得するDoctrineの [...]]]></description>
		<wfw:commentRss>http://www.exgear.jp/blog/2009/07/doctrine%e3%81%aefindbyfindoneby%e3%81%aborder-by%e3%82%92%e8%bf%bd%e5%8a%a0%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CakePHP IRC集会に参加しました</title>
		<link>http://www.exgear.jp/blog/2009/07/cakephp-irc%e9%9b%86%e4%bc%9a%e3%81%ab%e5%8f%82%e5%8a%a0%e3%81%97%e3%81%be%e3%81%97%e3%81%9f/</link>
		<comments>http://www.exgear.jp/blog/2009/07/cakephp-irc%e9%9b%86%e4%bc%9a%e3%81%ab%e5%8f%82%e5%8a%a0%e3%81%97%e3%81%be%e3%81%97%e3%81%9f/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 03:34:33 +0000</pubDate>
		<dc:creator>minoura</dc:creator>
		
		<category><![CDATA[その他]]></category>

		<category><![CDATA[新規タグの追加]]></category>

		<guid isPermaLink="false">http://www.exgear.jp/blog/?p=364</guid>
		<description><![CDATA[昨日cakephperさん主催のCakePHP第三回IRC集会に参加させて頂きました。
業務中だったこともあり、前半ほとんど発言できず、、途中開発環境の件では、みなさんの環境が立派すぎて「sakuraエディタです」とは言 [...]]]></description>
		<wfw:commentRss>http://www.exgear.jp/blog/2009/07/cakephp-irc%e9%9b%86%e4%bc%9a%e3%81%ab%e5%8f%82%e5%8a%a0%e3%81%97%e3%81%be%e3%81%97%e3%81%9f/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CakePHP　MySQLのバックアップ（mysqldump）を行うバッチ</title>
		<link>http://www.exgear.jp/blog/2009/06/cakephp%e3%80%80mysql%e3%81%ae%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97%ef%bc%88mysqldump%ef%bc%89%e3%82%92%e8%a1%8c%e3%81%86%e3%83%90%e3%83%83%e3%83%81/</link>
		<comments>http://www.exgear.jp/blog/2009/06/cakephp%e3%80%80mysql%e3%81%ae%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97%ef%bc%88mysqldump%ef%bc%89%e3%82%92%e8%a1%8c%e3%81%86%e3%83%90%e3%83%83%e3%83%81/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 08:26:37 +0000</pubDate>
		<dc:creator>minoura</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[Tips]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[mysqldump]]></category>

		<guid isPermaLink="false">http://www.exgear.jp/blog/?p=362</guid>
		<description><![CDATA[CakePHP1.2からコマンドラインからCakeが起動できるようになりました。
この機能を使って、MySQLのバックアップを行う簡単なスクリプトを作成してみました。
データベースの接続には、/app/config/da [...]]]></description>
		<wfw:commentRss>http://www.exgear.jp/blog/2009/06/cakephp%e3%80%80mysql%e3%81%ae%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97%ef%bc%88mysqldump%ef%bc%89%e3%82%92%e8%a1%8c%e3%81%86%e3%83%90%e3%83%83%e3%83%81/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CakePHP 動的なウィジェットの作り方</title>
		<link>http://www.exgear.jp/blog/2009/06/widget_compornent/</link>
		<comments>http://www.exgear.jp/blog/2009/06/widget_compornent/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 10:45:21 +0000</pubDate>
		<dc:creator>minoura</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[Compornent]]></category>

		<category><![CDATA[widget]]></category>

		<category><![CDATA[ウィジェット]]></category>

		<guid isPermaLink="false">http://www.exgear.jp/blog/?p=353</guid>
		<description><![CDATA[CakePHPではコントローラーでの処理はビューを介してレイアウトのメインコンテンツ($content_for_layout)の部分に展開されます。
その際レイアウトに配置してあるメインコンテンツ以外の部分は基本的にはコ [...]]]></description>
		<wfw:commentRss>http://www.exgear.jp/blog/2009/06/widget_compornent/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
