PHPでの配列の生成と要素の追加・削除等

  • PHP
  • 現在地

JavaScript と同じように変数に [] を格納して配列を作成しようとしたら、PHP 5.3の段階では対応しておらず、うまくいきませんでした。

PHP 5.4 からは、[] を変数に格納するだけで配列の作成ができるようになっています。

このように、言語が違えば配列の扱いも多少の違いがあるので、このページではPHPでの配列の扱いについて記述しておくことにします。

配列の作成

PHPでは、array() で array 型を生成し、それを変数に格納する事で配列を作成できます。

といっても、array() で生成しなくても、変数に [] を付けて値を格納することで、結果的に配列は作成されます。 ($a[] = '値';)

なお、関数 array_push() 等で、配列作成前の変数に値を追加しようとしても警告が返ってくるだけです。

なので、array() を使って配列を作成する利点は、配列に複数の値を与えつつ作成(初期化)できる点です。

  • 配列の初期化

    配列生成時に、キー(添え字)に初期値を設定する場合は、'キー' => '値' というように、ダブルアロー演算子「=>」 で関連付ける必要があります。

    空の配列を作成
    • $a = array();
    複数の値を持つ配列
    • $a = array('A','B','C');
    連想配列
    • $a = array(
      • 'A' => 'えー', 'B' => 'びー', 'C' => 'しー'
    • );
    多次元配列
    • $a = array(
      • 'read' => array(
        • 'A' => 'えー', 'B' => 'びー', 'C' => 'しー'
      • ),
      • 26
    • );

    なお、キーの指定を省略した場合、0 を始めとした数値がキーとして値と関連付けられます。

    すでに数値によるキーが値と関連付けられている場合は、その数値に +1 した値がキーとなります。

    多次元配列の例では、'read' というキーには配列が関連付けられていますが、その後の数字の 26 は、キーが省略されているため、通常の配列のように数字の 0 が関連付けられます。

  • 配列内の値への参照

    作成された配列内では、キーが値を配列の要素として関連付けているので、配列名['キー'] というように指定することで、配列内の要素(値)を参照することができます。

    つまり、上記の多次元配列 'A' を参照する場合は、$a['read']['A'] とする必要があります。

配列に対する操作用の関数など

ここでは、要素の追加や削除、ソート、長さの取得などの比較的よく使用される配列用の関数だけ記述しておきます。

  • 配列への要素の追加

    配列作成後に要素を格納する場合は、通常の式と同様にイコール(=)で代入できます。(配列名['キー'] = '要素';)

    ただし、代入では要素が存在するキーを指定すると上書きになるので、キーを指定しないことで、配列の最後に要素を追加することもできます。

    以下、配列に要素を追加する関数について。(太字は必須パラメータ)

    配列の最後に要素を追加
    array_push(配列, 追加する要素(複数可));
    配列の最初(0)に要素を追加
    array_unshift(配列, 追加する要素(複数可));
    要素が最初(0)に追加されるため、数値キーを持つ全ての既存の要素は、追加後にキーが振り直されます。
  • 配列内の要素の削除

    要素の格納や追加は式によってできますが、削除は式で null や '' を格納してもキーが残るので、関数によって行う必要があります。

    配列の末尾から要素を取り除く
    array_pop(配列)
    配列の先頭から要素を取り除く
    array_shift(配列)
    取り除いた後、他の数値キーが振り直され、キーが切り詰められます。
    特定の要素を削除する
    unset(配列['キー'])
    unset() は、本来変数に割り当てられた値を解除して破棄する変数操作関数なので、変数全般に利用できます。
  • 配列の要素をソート(並び替え)する

    以下の三つの関数は、どちらも降順になりますが、逆順でソートする場合は、rsort() , arsort() , krsort() がそれぞれ対応しています。

    配列内の要素を降順にソートする

    sort(配列, ソートフラグ)

    ソートフラグの値によって比較の対象が変わります。設置できる値は以下の通りです。

    • SORT_REGULAR - 通常の並び替え
    • SORT_NUMERIC - 数値で比較
    • SORT_STRING - 文字列として比較
    • SORT_LOCALE_STRING - setlocale() で設定された地域や言語に左右されるようです。
    • SORT_NATURAL - 自然順による比較 (PHP5.4から)
    • SORT_FLAG_CASE - '|' や OR で区切って、他のフラグと併せて設置することで、大文字小文字を区別しないようにします。(PHP5.4から)

    この関数でソートされた場合、文字列キーが関連付けられていた要素も、並び通りに数値キーが振り直されます。

    キーと値の要素の関係を維持したままソートする

    asort(配列, ソートフラグ)

    ソートフラグは、sort() と同様の値が設定できます。

    print_r() で確認すると分かるのですが、この関数でソートされた配列は、キーを変更せずに並び順で要素が格納されます。

    キーを比較してソートする

    ksort(配列, ソートフラグ)

    asort() と同様にキーを維持したままソートを行いますが、キーを比較対象とします。

    PHP5.4以前では、自然順(SORT_NATURAL)と大文字小文字の区別(SORT_FLAG_CASE)でのソートフラグが対応していませんが、natsort() , natcasesort() で代用できます。

  • 配列の長さを取得

    $a = count(配列またはオブジェクト, モード)

    モードの部分に 1 または COUNT_RECURSIVE を設置することで、配列内にある要素を再帰的に全て数えます。(指定しない場合、配列直下の要素のみを数えます。)

スポンサードリンク

inserted by FC2 system