今回はPHPでArrayObjectクラスを使った処理の方法について解説します。
ArrayObjectクラスは配列をオブジェクトに変換するクラスで、これを使うことで更に高度な配列処理を実現できます。しっかり学んでプログラム開発に役立ててください。
目次
ArrayObjectクラスで配列をオブジェクトに変換する方法
以下は連想配列$arrayをArrayObjectクラスを使ってオブジェクトに変換する例です。引数に配列を渡せばオブジェクトして返ってきます。
1 2 3 |
$array = array('Watanabe'=>32, 'Sato'=>48, 'Ikeda'=>36, 'Yamada'=>28); $obj = new ArrayObject($array); print_r($obj); |
以下が出力例です。ちゃんとオブジェクトとして返ってきました。配列のキーと値はArrayObjectクラスでオブジェクト化されたことでプロパティと呼ばれるようになります。
1 2 3 4 5 6 7 8 9 10 11 |
ArrayObject Object ( [storage:ArrayObject:private] => Array ( [Watanabe] => 32 [Sato] => 48 [Ikeda] => 36 [Yamada] => 28 ) ) |
このようにクラスから生成されたオブジェクトをインスタンスと呼びます。インスタンス化することで配列の状態では得られない様々なメリットがあります。
ArrayObjectクラスのメソッド使用例
配列をArrayObjectクラスのインスタンス化することで、各種メソッドを使うことができるようになります。以下に代表的なメソッドを紹介します。
Countメソッド
Countメソッドはプロパティの数を取得するメソッドです。
1 2 3 |
$array = array('Watanabe'=>32, 'Sato'=>48, 'Ikeda'=>36, 'Yamada'=>28); $obj = new ArrayObject($array); echo $obj->count() ."\n"; |
以下の通りプロパティの数(配列で言う値の数)が出力されます。
1 |
4 |
asortメソッド
asortメソッドはプロパティの値で昇順にソートしてくれるメソッドです。
1 2 3 4 |
$array = array('Watanabe'=>32, 'Sato'=>48, 'Ikeda'=>36, 'Yamada'=>28); $obj = new ArrayObject($array); $obj->asort(); print_r($obj); |
結果はご覧の通り値の低い順に並び替えられました。
1 2 3 4 5 6 7 8 9 10 11 |
ArrayObject Object ( [storage:ArrayObject:private] => Array ( [Yamada] => 28 [Watanabe] => 32 [Ikeda] => 36 [Sato] => 48 ) ) |
ksortメソッド
ksortメソッドはプロパティのキーを昇順で並び替えてくれるメソッドです。
1 2 3 4 |
$array = array('Watanabe'=>32, 'Sato'=>48, 'Ikeda'=>36, 'Yamada'=>28); $obj = new ArrayObject($array); $obj->ksort(); print_r($obj); |
以下の通りキーがアルファベット順に並び替えられました。
1 2 3 4 5 6 7 8 9 10 11 |
ArrayObject Object ( [storage:ArrayObject:private] => Array ( [Ikeda] => 36 [Sato] => 48 [Watanabe] => 32 [Yamada] => 28 ) ) |
uasort, uksortメソッドで降順に並び替える
降順に並び替えるメソッドは存在しません。その代わりにuasortメソッドとを使うことで実現できます。uasort, uksortメソッドはコールバック関数を指定し、その関数内で比較関数を使うことで並び替えを実装します。以下はuasortメソッドで指定したDescOrder関数の中で値を降順に並び替えさせています。
1 2 3 4 5 6 7 8 9 10 11 |
$array = array('Watanabe'=>32, 'Sato'=>48, 'Ikeda'=>36, 'Yamada'=>28); $obj = new ArrayObject($array); $obj->uasort("DescOrder"); print_r($obj); function DescOrder($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? 1 : -1; } |
結果はご覧の通り値を降順に並び替えすることができました。同じ要領でuksortメソッドを使えばキーを並び替えさせることができます。
1 2 3 4 5 6 7 8 9 10 11 |
ArrayObject Object ( [storage:ArrayObject:private] => Array ( [Sato] => 48 [Ikeda] => 36 [Watanabe] => 32 [Yamada] => 28 ) ) |
オブジェクトから配列に戻す方法
最後にオブジェクトから配列に戻す方法について解説します。ArrayObjectクラスにはgetArrayCopyという配列にエクスポートするメソッドが用意されています。これを使うことで配列に戻すことができるわけです。
以下はArrayObjectクラスでインスタンス化されたオブジェクト$objを配列$array2に戻している例です。
1 2 3 4 5 |
$array = array('Watanabe'=>32, 'Sato'=>48, 'Ikeda'=>36, 'Yamada'=>28); $obj = new ArrayObject($array); $array2 = $obj->getArrayCopy(); print_r($array2); |
以下が出力結果です。目的通り配列に戻すことができました。
1 2 3 4 5 6 7 |
Array ( [Watanabe] => 32 [Sato] => 48 [Ikeda] => 36 [Yamada] => 28 ) |
これによって、配列をオブジェクト化することでArrayObjectクラスの各種メソッドが利用でき、そこで処理した後にまた配列に戻すことができるわけです。
まとめ
いかがでしょうか。今回はPHPでArrayObjectクラスを使った処理の方法について解説しました。
ArrayObjectクラスによって配列をオブジェクトに変換することで高度な処理が可能になることがおわかりいただけたかと思います。ぜひ習得して効率的なプログラム開発を目指してください。