Home > PHP > PHPerの悩みを解決する arry を作ってみた(PHP Advent Calendar jp 2011 Day 2)

PHPerの悩みを解決する arry を作ってみた(PHP Advent Calendar jp 2011 Day 2)

  • 2011-12-02 (金) 11:00
  • PHP
この記事の所要時間: 359

PHP Advent Calendar jp 2011 2日目です。

はい、PHPer王子です。

前日の @cakephper さんになんだか妙な名前を付けられました が、今年も PHP Advent Calendar を実施することになりました。管理人がなぜか 2 日目という変わったスタートとなりましたが、なんとか12/25の最後日まで駆け抜けたいと思います。参加されたみなさんよろしくお願いします!

ちなみにまだ数日空きがあるので、いっちょ書いてみよーという方の参加お待ちしてます:D

PHPerにおける連想配列の悩み

王子らしくPHPerの悩みを解決したい!ということで、連想配列にまつわるお悩みを。

普段PHPを書いていて何とも悩ましいのが、array関連の関数です。PHPerなら、もう何度となく聞いたことがあるであろう「引数に統一感が無い」というやつですね。

一例をあげると、コールバック関数を受け取る array_filter, array_map, array_reduce などの関数の場合、引数として受け取るのはどれも対象の連想配列とコールバック関数の2つです。普通に考えれば、どの関数でも同じ順序で引数を受け取れば良いように思うのですが、下記のように array_filter/array_walkは第1引数が array になっているのに対して、array_map は第1引数がコールバック関数となっています。

array array_filter ( array $input [, callback $callback ] )
array array_map ( callback $callback , array $arr1 [, array $... ] )
bool array_walk ( array &$array , callback $funcname [, mixed $userdata ] )

実際のコードで書くと違和感はさらにつのります。引数が違うという点もそうですが、array_mapの無名関数の後に連想配列を指定するのがなんとも気持ち悪いですね。

arryなら!

ということでもっとシンプルに書けるように arry というライブラリを作ってみました。

これを使うとこんなにすっきりと書けます。

メソッドチェイン

各メソッドはインスタンスを返すので、メソッドチェインもできます。

実行すると以下のようになります。

200
180
160
140
120
100
80
60
40
20

メソッドチェインを繋げていく

上手く繋げて行くと、array を追加して、各配列について計算した結果を追加して、ソートして、出力する、ということが一気に書けます。

実行すると悲しき今シーズンの結果が表示されます。

1. Dragons    75 59 0.560
2. Swallows   70 59 0.543
3. Giants     71 62 0.534
4. Tigers     68 70 0.493
5. Carp       60 76 0.441
6. Baystars   47 86 0.353

キーがあるかどうか

PHPでハマりがちな isset() / array_key_exists() も exists() メソッドで指定したキーが連想配列に存在するか確認できます。

PHP5.4なら

5.4ならarray()の代わりに[]が使えるので、さらにすっきりとなります。

実はこの arry という名前は、5.4 以降では array() を使わなくだろうから、この名前にしています。今は紛らわしいですが、5.4 が当たり前になったころにはこのライブラリ以外で array() と書くことはなくなるかもしれません:D

shin1x1/arry – GitHub

本当はSPLで

そんな arry ですが、array系関数の代わりとして使うにはまだまだ実装が足りません。

実はこれを書いた理由は SPL でこういった実装が欲しかったからなんですね。ArrayObject もありますが、実装メソッドが少なく、完全に連想配列をメソッドで操作するというわけにはいきません。

arry を膨らませていっても良いのですが、PHP 標準の SPL でこういったクラスが欲しいですね。

さて PHP Advent Calendar jp 2011 3日目は、AWS の貴公子 @tottokug さんです。どんなネタが飛び出すか楽しみですね!

Pocket

follow us in feedly

トラックバック:0

このエントリーのトラックバックURL
/blog/2011/12/php_arry.html/trackback
Listed below are links to weblogs that reference
PHPerの悩みを解決する arry を作ってみた(PHP Advent Calendar jp 2011 Day 2) from Shin x blog

Home > PHP > PHPerの悩みを解決する arry を作ってみた(PHP Advent Calendar jp 2011 Day 2)

検索
フィード
メタ情報

Return to page top