Life

連想配列の同じkey名の値を加算する

前に覚えた func_get_args というメソッドを使える機会があったので、使った内容をメモ。

タイトルの通り、パラメタで渡された連想配列のうち、同じkey名の値を加算します。パラメタはいくつでも渡せます。 func_get_argsのいいところ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    //-----------------------------------------------------------------
    // パラメタで渡された配列の、同じkey名の値を合算した配列を返却する
    //-----------------------------------------------------------------
    protected function _arrayAdd()
    {
        $ret = array();
 
        // パラメタが1つ以上ない場合は処理をしない
        $params = func_get_args();
        if (count($params) == 0 ) { return; }
 
        foreach ($params as $item) {
            if (!is_array($item)) { continue; }
 
            foreach ($item as $key => $value) { $ret[$key] += $value; }
        }
 
        return $ret;
    }

extractという関数を見つけた

wordpressのソースを見ていたら、extractという関数を見つけた。
詳細はこちら。http://php.net/manual/ja/function.extract.php

連想配列の、key名の変数に、vlaueの値をつっこんでくれる関数。
今まで、

1
list($key1, $key2, $key3) = explode($list);

のように書いてた部分が、

1
extract($list);

というようにもかける。

listだと、変数の数を動的に増やしたいときに不便だと感じるときがあったので、そういうときの代替案として使えそう。

phpで子クラスへ__constructのパラメタを渡す

今までは、配列で渡してたんですが、違和感があるので、どうにか__constructに渡した形と同じように _initにも渡せないかなと考えて、以下のようにしました。

意図通りに動いてくれています。5個以上パラメタがあるときも稀だと思うので、5個までにしています。増えたら増やせばいいかなと。これで違和感なく使えるようになってすっきりです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
abstract class Hoge_Model_Abstract
{
    final public function __construct()
    {
        // ここに共通初期化処理
 
        if (func_num_args() != 0) {
            list($param1, $param2, $param3, $param4, $param5) = func_get_args();
        }
        $this->_init($param1, $param2, $param3, $param4, $param5);
    }
 
    protected function _init()
    {
        // 初期化処理するときはこちらで
    }
}

archives

Get Adobe Flash playerPlugin by wpburn.com wordpress themes