array_udiff / コールバック関数
PHPのコールバック関数の使い方を学習いたしました。グローバルなものなら関数名だけ渡せばいいけど、クラスに属する関数を渡す時($obj->funcを渡したい時)は array( $obj, 'func' ); ってな感じで渡さないといけないんですね(最初見たときなんで配列渡してるのか分からんかった...)。
array_udiff(差分)の使い方が分からなくて調べてたんですが。とりあえずメモしておこう。
<?php class Foo { function createArray( $id, $name, $price ) { return array( 'id' => $id, 'name' => $name, 'price' => $price ); } function myComp( $a, $b ) { if ( $a['id'] == $b['id'] ) return 0; return ($a['id'] < $b['id']) ? -1 : 1; } public function test() { $ar1 = array( $this->createArray( 1, 'pen', 120 ), $this->createArray( 2, 'book', 3000 ), $this->createArray( 3, 'john', 250 ), $this->createArray( 4, 'potato', 10000 ), $this->createArray( 5, 'drink', 147 ), ); $ar2 = array( $this->createArray( 1, 0, 0 ), $this->createArray( 3, 0, 0 ), $this->createArray( 5, 0, 0 ), ); $ar3 = array_udiff( $ar1, $ar2, array( & $this, 'myComp' ) ); echo '<pre>'; print_r( $ar3 ); echo '</pre>'; } } $f = new Foo(); $f->test(); ?>
出力:
Array ( [1] => Array ( [id] => 2 [name] => book [price] => 3000 ) [3] => Array ( [id] => 4 [name] => potato [price] => 10000 ) )
array_udiff : http://jp.php.net/manual/ja/function.array-udiff.php
配列関数目次 : http://jp.php.net/manual/ja/ref.array.php