ArrayObjectクラスとArrayIteratorクラス

ArrayObjectクラスを継承して配列クラスを作る

class MyArrObj extends ArrayObject {
    function __construct($arr) {
        parent::__construct($arr);
    }
    function double() {
        $arr = $this->getArrayCopy();
        return new MyArrObj(array_merge($arr, $arr));
    }
}

配列の走査

配列クラスをイテレータを使って走査する 1

$arrObj = new MyArrObj(array(1,2,3));
$it = $arrObj->getIterator();
while ($it->valid()) {
    $k = $it->key();
    $v = $it->current();
    printf("%s : %s\n", $k, $v);
    $it->next();
}

配列クラスをイテレータを使って走査する 2

$arrObj = new MyArrObj(array(1,2,3));
$it = $arrObj->getIterator();
foreach ($it as $k => $v) {
    printf("%s : %s\n", $k, $v);
}

配列クラスを配列変数的に走査する

$arrObj = new MyArrObj(array(1,2,3));
foreach ($arrObj as $k => $v) {
    printf("%s : %s\n", $k, $v);
}

配列クラスにメソッドを使って値を追加する

$arrObj->append('4');

配列クラスに配列キーワードを使って値を追加する

$arrObj[] = 5;

配列クラスに定義されたメソッドを使う

$arr2 = $arrObj->double();

ArrayIteratorクラスを継承して配列イテレータークラスを作る

class MyArrIt extends ArrayIterator {
    function isEven() {
        $k = $this->key();
        return $k % 2 === 0 ? true : false;
    }
}

配列クラスのイテレーターを変更する

$arrObj->setIteratorClass('MyArrIt');

配列イテレータークラスに定義されたメソッドを使う

$it = $arrObj->getIterator();
foreach ($it as $k => $v) {
    $x = $it->isEven() ? 'O' : 'X';
    printf("%s %s : %s\n", $x, $k, $v);
}

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2011-12-01 (木) 15:51:32 (2485d)