2010年5月28日金曜日

PHP PostgreSQLであ行検索とか簡単にする方法

preg_replaceとSUBSTRINGとINと

$japanees_row = trim(preg_replace('/./u', "'$0',", 'あいうゔえお'), ',');
$where = " SUBSTRING(family_name_kana, 1, 1) IN({$japanese_row})";

こんな感じですね。注意点としては、他の行は濁音や半濁音があることくらいでしょうか

文字列を一文字ずつ配列にする方法 JavaScript PHP Ruby Perl Python Scala

いろいろやってみたなかったの

パスワード自動生成とか、とにかくランダムな文字列を生成する時に、substringみたなので何文字目を取得するという方法と、文字列を配列に落として配列のキーで取得する方法とありますが、今回は後者向けというか、各言語の違いをちょっと調べてみました

JavaScript

var strs = 'abcdefg'.split('');

Ruby

strs = 'abcdefg'.split('')
# split '' でも可能

Scala

var strs = "abcdefg" split ""
var strs = "あいうえお" split ""
# .を入れてもOK

PHP

$strs = str_split('abcefg');

Perl

@strs = split //, 'abcdefg';

use Encode;
@strs = split //, decode_utf8('あいうえお');

Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-

strs = list('abcdefg');
strs = list(u'あいうえお');

2010年5月21日金曜日

PHP SQLで同じフィールドに対してORを何回もやる時とかに使える方法

配列を駆使する(implode)

ちょっとgistが使えるかのテストも含めて

んー、ちょっと文字が小さいですが、直接ファイルを見れるからいいや!

これだと、すっきりしてるし、配列の最後の処理とかもないので、一度この方法を身につければずっとこのやり方になると思います。他にスマートなやり方があったら是非教えて下さい!

2010年5月14日金曜日

PHPでメタプログラミングの最初の一歩は__callから?

__callはRubyでいうMethod Missingかしら

PHPにはいくつかマジックメソッドがあって、そのうちの一つが__call。__get __setはYzwでほんのちょっぴり使いました。

__callって遅いらしい。でもさっき試した範囲では別に劇的に遅いとは感じなかったです。むしろ__callを使ってメタプログラミングしといて、スピードが求められる時にコードを書いてしまえばいいんじゃないかと思います。最適化ってやつです。

メタプログラミングの一歩手前?

最近モデル名とデータベースのテーブル名に規約をもたせててるのと、それぞれのテーブルからデータを取り出すクラスを親クラスから派生させて作っているので、findByIdを親クラスで定義して子クラスの名前からテーブルを割り出して該当するレコードを返すというメソッドを書きました。findById以外も書いたんですが、そのおかげで8つの子クラスからメソッドが消えて親クラスのメソッド1つに集約することができました。まだまだクラスが増えていく予定なので実装してよかったと思った部分なので、さらにメタプログラミングに磨きをかけて、コードを書く量を減らして効率化を計ろうと考え中!

でもあれですね。やっぱりPHP5.3がいい。PHP5.3ならActiveRecordとかORM系ライブラリがもっと充実してくるんじゃないかと思います。

2010年5月11日火曜日

CakePHPのPaginatorで0件表示を変えたい

$paginator->hasPage()で判定する

詳しい仕様はWebで!PaginatorHelper::hasPage()。CakePHPよくできてますね!