配列に対するフィルタリング

たぶん他の言語だと、ブロック(処理の塊。ま、PHPだと関数とかメソッドってことでいいか)を
渡してとかで簡単にできるんだろうけど。
PHPだとどうしてもforeachになっちまう。

    public function isIgnore($pathname)
    {
        $match = false;
        foreach ($this->ignore as $ignore) {
            if (preg_match("|{$ignore}|", $pathname)) {
                $match = true;
                break;
            }
        }

        return $match;
    }

foreach 内の処理が関数化できればarray_mapとか使えるのになぁとか思う。
上記の場合だったら、正規表現を渡すと渡した正規表現にマッチするかどうか判断する
関数を作ってくれたりするクラスがあるといいなとか。それがフィルタクラス?
ま、いろいろ問題あるよね。。。処理が別のとこに記述されるので可読性下がるよねとか。。。

class Filter {
    private static $regexes = array();

    public static function regex($regex)
    {
        if (!isset(self::regexes[$regex])) {
            $r = preg_quote($regex);
            self::regexes[$regex] = create_function("\$pathname", "return (preg_match("/$r/", \$pathname) === 1);');
        }
        return self::regexes[$regex];
    }
}

    public function isIgnore($pathname)
    {
        $match = array_map(Filter::regex($pathname), $this->ignore);
        return (0 < count($match));
    }