PHPまとめ - 配列操作

HOME | TOP

■ 配列の作成

▼ array()を使って配列作成

作成した配列は、$array[0]のようにして値を参照できる。
配列の要素は0番目から始まるので$array[0], $array[1], $array[2]と続くことになる。




▼ 要素ごとに代入して配列作成




▼ 要素ごとに代入して配列作成(その2)

0番目要素から始まる一般の配列の他に、連想配列がある。
一般の配列は0番目要素から順番につづいていくが、連想配列はキー(文字列)とその値のペアになっていて、一般の配列との間に扱い方に違いはない。




▼ 連想配列の作成


▼ 連続の値を持つ配列の作成


▼ 同じ値を持つ配列の作成

同じ値で配列を生成と同時に初期化する場合に便利


■ 配列をチェック

▼ is_array()

配列データかどうかをチェック




▼ count()

配列の要素数を得る

sizeof()はエイリアス




▼ isset()とarray_key_exists()

要素の有無をチェック

isset()とarray_key_exists()の違いは、isset()がnull値も偽扱いするのに対し、array_key_exists()は値がnullでも定義されていれば真として扱う。




▼ in_array()とarray_search()

配列に値があるかチェック

array_search()関数では、最初に値が一致したキーを1つだけ返すので、一致するキー全部を取得するには$sub = array_keys($array, 5)とする必要がある。




▼ preg_grep()

パターンに該当する要素を取得する。


■ 配列の参照

配列参照用にforeachループがある。

▼ 配列のキーと値を参照

foreachループにおいて、「キーと値」または「値のみ」を参照することができます。

"as"はforeachループのみで使用するキーワードになります。




▼ 配列のキーのみを参照

array_keys()関数を使ってキーを値とする配列を生成しています。その新しく生成した配列の値を参照していることになります。

ただし、新たな配列を生成しているのでコストを考えたら以下のように「$key => $value」を使って$valueを無視した方がいいような気がする。




▼ 配列のキーのみを参照(その2)

もしも配列の値が膨大なデータだとかなりの量のデータコピーが頻発してロスが生じる。
こういう場合はできればリファレンスを使うことも考えた方がよい。


■ 配列を受け取る

array()による配列生成時は変数に代入する方法で配列を受け取る

array()は関数ではなくて言語構造ではあるが、配列を返す関数の場合でも変数への代入の形で受け取ることができる。




その他、list()を使って配列を受け取る方法がある。




list()を使う場合には、返ってくる配列の要素数があらかじめ分かっている場合じゃないと使えない。

もしも要素数が想定よりも少なかった場合には「Notice: Undefined offset: 2 in /path/to/filename on line N」のような警告が表示される。




次は必要な要素だけを受け取る。不要な代入(データコピー)を行わない分軽くなる。




その他複雑な配列を、ネストにしたlist()で受け取る方法があります。





■ 配列の削除

配列の削除は、「要素ごとの削除」と「配列全体の削除」がある。

▼ unset()

削除と書いたが、実際には変数の割り当てを解除とか変数の破棄とかの表現をされている。

unset($array[0], $array[2])とすれば飛び飛びで要素削除を行うこともできる。




▼ array()

新たに生成した空の配列を代入している。
形としてはunset()同様にすべての要素を削除した感じになる。




▼ array_shift()

先頭要素を抜き出して返します。その結果、配列は新しい0番目の要素から始まるようにスライドしています。

これとは逆に、先頭要素に追加するarray_unshift()関数がある。




▼ array_pop()

末尾要素を抜き出して返します。その結果、配列は末尾要素が抜き取られて消えています。

これとは逆に、末尾要素に追加するarray_push()関数があるが、$array[] = 'foo'で追加した方が速い。




▼ array_splice()

配列の部分要素を抜き出す。その結果、元の配列は部分要素が抜き取られている。


■ 配列をフィルターにかける

フィルターとは、条件に合う要素を抽出すること

▼ array_filter()

条件判定用のコールバック関数を作る(真か偽を返す)

一度しか呼ばないようなコールバック関数を定義するのが見通しが悪くなるようならcreate_function()関数で定義した匿名関数を直接渡せばよい。




▼ array_unique()

配列から重複した値を削除する

キーと値の関係は維持されている。


■ 配列の全要素に処理をほどこす

▼ array_walk()

配列の全ての要素にユーザ関数を適用する




▼ array_map()

指定した配列の要素にコールバック関数を適用する

array_walk()との違いは、結果を配列で取得できること

要素数の同じ複数の配列を並列に処理することもできる。




その他、第一引数をnullとすることにより配列の配列を生成できる。





■ 配列を並べ替える

▼ array_reverse()

要素を逆順にした配列を返す




▼ shuffle()

配列をシャッフルする




▼ asort()とarsort()

連想キーと要素との関係を維持しつつ配列をソートする

値に関してアルファベット順にソート




▼ ksort()とkrsort()

配列をキーでソートする

キーに関してアルファベット順にソート




▼ sort()とrsort()

配列をソートする

キーを無視して、値に関してアルファベット順にソートし配列の0番目から再割り当てを行う。





■ その他の処理

▼ array_rand()

配列から一つ以上の要素をランダムに取得する

注意すべきは、値ではなくてキー(添え字)が返されること。




▼ array_slice()

配列の一部を展開する




▼ implode()

配列の値を連結して一つの文字列として返す

キーがあっても無視される。

join()はエイリアス


2010(C)Mingw