0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHP 配列・イテレータ ドキュメント

Last updated at Posted at 2019-07-27

このページについて

配列やイテレータに関するインターフェースのドキュメントリンク集です。

PHP マニュアル > 関数リファレンス
https://www.php.net/manual/ja/funcref.php

PHP マニュアル > 関数リファレンス > その他の基本モジュール > JavaScript Object Notation
https://www.php.net/manual/ja/book.json.php

PHP マニュアル > 関数リファレンス > その他の基本モジュール > Standard PHP Library (SPL)
https://www.php.net/manual/ja/book.spl.php

PHP マニュアル > 言語リファレンス
https://www.php.net/manual/ja/langref.php

配列

ArrayAccess インターフェイス

配列としてオブジェクトにアクセスするための機能のインターフェイスです。

ArrayObject クラス

このクラスは、オブジェクトを配列として動作させます。

Countable インターフェイス

Countable を実装したクラスは、 count() 関数で使用することができます。

ジェネレータ

ジェネレータ関数の見た目はふつうの関数とほぼ同じです。違うのは、値を返すのではなく、 必要なだけ値を yield することです。

ジェネレータ関数が呼ばれると、反復処理が可能なオブジェクトを返します。 このオブジェクトを (foreach ループなどで) 反復させると、 値が必要になるたびに PHP がジェネレータ関数を呼びます。 そして、ジェネレータが値を yield した時点の状態を保存しておき、 次に値が必要になったときにはそこから再開できるようにします。

yield できる値がなくなると、ジェネレータ関数は何もせず単純に終了します。 呼び出し元のコードでは、配列の要素をすべて処理し終えた後のように、そのまま処理が続きます。

イテレータ

Iterator インターフェイス

外部のイテレータあるいはオブジェクト自身から反復処理を行うためのインターフェイスです。

IteratorAggregate インターフェイス

外部イテレータを作成するためのインターフェイスです。

OuterIterator インターフェイス

OuterIterator を実装したクラスは、 イテレータ群の反復処理に使うことができます。

RecursiveIterator インターフェイス

RecursiveIterator を実装したクラスは、 イテレータ群を再帰的に反復処理するときに使うことができます。

SeekableIterator インターフェイス

Seekable イテレータです。

SPL イテレータ

SPL にはイテレータが用意されており、オブジェクトを反復処理することができます。

SPL イテレータクラスツリー

ArrayIterator
    RecursiveArrayIterator

EmptyIterator
IteratorIterator
    AppendIterator
    CachingIterator
        RecursiveCachingIterator
    FilterIterator
        CallbackFilterIterator
            RecursiveCallbackFilterIterator
        RecursiveFilterIterator
            ParentIterator
        RegexIterator
            RecursiveRegexIterator

    InfiniteIterator
    LimitIterator
    NoRewindIterator

MultipleIterator
RecursiveIteratorIterator
    RecursiveTreeIterator

DirectoryIterator (extends SplFileInfo)
    FilesystemIterator
        GlobIterator
        RecursiveDirectoryIterator

データ構造

SPL では、標準的なデータ構造を提供しています。 ここで、それらを実装ごとに分類してまとめます。

双方向リンクリスト

双方向リンクリスト (Doubly Linked List: DLL) は、双方向のノードへのリンクを持つノードのリストです。 イテレータの操作、両隣へのアクセス、ノードの追加や削除のコストは、 データ構造が DLL の場合は O(1) となります。 これは、スタックやキューを実装するのに適しています。

SplDoublyLinkedList
    SplStack
    SplQueue

ヒープ

https://www.php.net/manual/ja/class.splheap.php
https://www.php.net/manual/ja/class.splpriorityqueue.php

ヒープは、ツリー風の構造です。ヒープ特有の性質として、 個々のノードはその子ノードと等しいかそれより大きな値となります。 値の比較は、ヒープ全体の比較メソッドとして実装されているものを使用します。

SplHeap
    SplMaxHeap
    SplMinHeap

SplPriorityQueue

配列

配列は、データを連続的に格納してインデックス経由でアクセスできるようにした構造です。 PHP の配列と混同しないようにしましょう。PHP の配列は、 実際のところは順序つきハッシュテーブルとして実装されています。

SplFixedArray

マップ

マップは、キー/値 のペアからなるデータ構造です。 PHP の配列は、整数値/文字列を値と対応させたマップとみなすことができます。 SPL では、オブジェクトとデータを対応させるマップを提供しています。 このマップは、オブジェクトの集合として扱うことができます。

SplObjectStorage

Observer パターン

SplObserver インターフェイス

SplObserver インターフェイスを SplSubject とともに使うと、Observer パターンを実装することができます。

SplSubject インターフェイス

SplSubject インターフェイスを SplObserver とともに使うと、Observer パターンを実装することができます。

SPL 関数

iterator_apply

ユーザー関数をイテレータのすべての要素でコールする

iterator_count

イテレータにある要素をカウントする

iterator_to_array

イテレータを配列にコピーする

データ保存関連

Serializable インターフェイス

独自のシリアライズ用のインターフェイスです。

このインターフェイスを実装したクラスは __sleep() や __wakeup() をサポートしなくなります。 シリアライズが必要な場合には、自動的に serialize メソッドがコールされます。 このメソッドは __destruct() を実行しません。また、 メソッド内で明示的に書かない限りは一切の副作用を及ぼしません。 アンシリアライズされるときにはそのクラスが自動的に検知し、__construct() メソッドのかわりに適切な unserialize() メソッドがコールされます。 標準のコンストラクタを実行させたい場合は、unserialize() メソッドの中でそれをコールします。

JsonSerializable インターフェイス

JsonSerializable を実装したオブジェクトは、 json_encode() を呼んで処理されたときの自身の JSON 表現をカスタマイズできます。

あまり意識することのないクラス

Generator クラス

Generator は ジェネレータ が返すオブジェクトです。

Closure クラス

無名関数 を表すために使うクラスです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?