ほのかパパのPHP教室
配列編
BACK



01)配列を作成する
02)配列に要素を追加する
03)配列の要素を削除する
04)配列から任意の要素を取り出す
05)配列の要素を置換する
06)配列の要素をランダムに取得する
07)配列の要素数を取得する
08)配列のキーを取得する
09)配列の値を取得する
10)配列のキーと値のペアを取得する
11)指定した値で配列の要素を埋める
12)配列のキーを大文字か小文字に一括変換する
13)配列のキーと値を入れ替える
14)配列の内部ポインタを操作する
15)配列の要素の値の合計を算出する
16)重複する値を配列から除去する
17)配列の要素を検索する
18)複数の配列の要素で唯一の要素を抽出する
19)複数の配列に共通する要素を抽出する
20)複数の配列を1つの配列にする
21)配列の要素の順序を逆転する
22)一定範囲の整数を値とする配列を作成する
23)配列の要素をシャッフルする
24)配列をキーで並べ替える
25)配列を値で並べ替える
26)配列のキーと値の関係を崩さずに並べ替える
27)配列を自然順に並べ替える
28)変数を連想配列にまとめる
29)連想配列を変数に展開する
30)配列かどうかを調べる
31)配列を連結して文字列にする
32)文字列を分解して配列にする


01)配列を作成する
一般的に配列を作成するにはarray()を使います。

 配列 = array('a', 'b', 'c');

配列の個々の要素には、配列名に[]をつけ、その中にインデックス番号を記述することで、各要素にアクセスできます。 配列の要素はゼロから始まります。

 配列[0] = 'a'
 配列[1] = 'b'
 配列[2] = 'c'

連想配列を作成する場合も、同様にarray()を使いますが、記述は以下のようになります。

 連想配列 = array('a'=>'1', 'b'=>'2', 'c'=>'3');

連想配列の個々の要素には、配列名に[]をつけ、その中に連想文字列を記述することで、各要素にアクセスできます。

 配列['a'] = '1'
 配列['b'] = '2'
 配列['c'] = '3'

02)配列に要素を追加する
配列の末尾に要素を追加するにはarray_push()を使用します。

 追加後の要素数 = array_push(配列, 追加する要素1, 追加する要素2, ...);

配列の先頭に要素を追加するにはarray_unshift()を使用します。 配列の長さは追加した要素数分長くなり、すべての要素はその分後ろにずれます。

 追加後の要素数 = array_unshift(配列, 追加する要素1, 追加する要素2, ...);

03)配列の要素を削除する
配列の末尾の要素を削除するにはarray_pop()を使用します。

 末尾の要素 = array_pop(配列);

配列の先頭の要素を削除するにはarray_shift()を使用します。 配列の長さ1つ分短くなり、すべての要素はその分前にずれます。

 先頭の要素 = array_shift(配列);

04)配列から任意の要素を取り出す
 配列から任意の要素を取り出すにはarray_slice()を使用します。 配列の要素を取り出すだけで、削除するわけではありませんので、array_pop()やarray_shift()とは異なります。 返り値は、取り出した要素でできている配列になります。取り出し開始位置は配列のインデックス番号になります。
 また、配列の末尾から要素を取り出すこともできます。その際、末尾のインデックス番号を「-1」、その前を「-2」と指定します。
 取り出し個数については省略することができます。省略した場合、末尾の要素まで取り出すことになります。

 配列 = array_slice(配列, 取り出し開始位置, [取り出し個数]);

05)配列の要素を置換する
 配列の任意の要素を置換するにはarray_splice()を使用します。 この関数は、削除開始位置から、削除する個数分の要素を削除し、その部分に新しい要素を追加するようになっています。 返り値は、削除した要素でできている配列になります。
 また、配列の末尾から要素を削除することもできます。その際、末尾のインデックス番号を「-1」、その前を「-2」と指定します。
 削除する個数および置換する新しい要素については省略することができます。 削除する個数を省略した場合、削除開始位置から新しい要素を追加することになります。 また、置換する新しい要素を省略した場合は、削除開始位置から削除する個数分の要素を削除することになります。 両方省略した場合は、何も処理しません。
 また、削除開始位置や削除する個数が対象の配列の要素数より大きい場合は、合致する要素だけ削除し、新しい要素を追加することになります。 なので、エラーが発生することはありません。

 配列 = array_splice(配列, 削除開始位置, [削除する個数], [置換する新しい要素(配列)]);

06)配列の要素をランダムに取得する
 配列の要素をランダムに取得するには、まずsrand()を使用して、乱数発生器を初期化する必要があります。 (乱数発生器を初期化するときは、実行ごとに結果が変わるように、現在の時刻の秒数などから生成するのが慣例になっています。)
 次に、array_rand()で要素のキーをランダムに取得します。 取り出す要素数を省略するか1を指定すると要素のキーを1つだけ返しますが、 2以上の数値を指定すると、複数の要素のキーを配列として返します。

 srand(整数);
 要素のキー = array_rand(配列, [取り出す要素数]);

07)配列の要素数を取得する
 配列の要素数を調べるにはcount()sizeof()を使用します。 どちらを使用しても結果は変わりません。 配列に要素がない場合はゼロが返されます。 また、引数で渡された値が配列でない場合は「1」を返します。

 要素数 = count(配列);
 要素数 = sizeof(配列);

08)配列のキーを取得する
 配列のキーを取得するにはkey()を使用します。 この関数を使用すると、配列のポインタが指し示している要素のキーを取得することができます。
 また、配列のキーの一覧を取得するにはarray_keys()を使用します。 引数に取得したい値を指定すると、その値を持つ要素のキーの一覧を取得できます。 指定しなかった場合は、すべての要素のキーの一覧を取得できます。

 キー = key(配列);
 キーの配列 = array_keys(配列, [値]);

09)配列の値を取得する
 配列のキーを取得するにはcurrent()pos()を使用します。 この関数を使用すると、配列のポインタが指し示している要素の値を取得することができます。 どちらの関数を使用しても結果は変わりません。
 また、配列のすべての要素の一覧を取得するにはarray_values()を使用します。

 値 = current(配列);
 値 = pos(配列);
 値の配列 = array_values(配列);

10)配列のキーと値のペアを取得する
 配列のキーと値のペアを取得する主な方法としてlist()each()を組み合わせた方法、 またはforeach()を使用した方法があります。 each()は配列の内部ポインタが指し示している要素のキーと値のペアを取得して、内部ポインタを次の要素に進めるという関数です。 each()を使用した場合、以下のようになります。

 $hash = array('a'=>'1', 'b'=>'2', 'c'=>'3');
 $array = each($hash);
 foreach ($array as $key => $value) {
   print "$key = $value";
 }

 [結果]
  0 = a
  1 = 1
  key = a
  value = 1

 each()とlist()を組み合わせると、以下のようになります。

 $hash = array('a'=>'1', 'b'=>'2', 'c'=>'3');
 while ((list($key, $value) = each($hash)) {
   print "$key = $value";
 }

 [結果]
  a = 1
  b = 2
  c = 3

 ここで注意しなければいけないことは、each()を使用して処理しているため、処理が終わった後に内部ポインタが末尾の要素を指し示したままになってしまうということです。 each()を使用する場合は、処理前後にreset()を使用して配列の先頭に内部ポインタを移動しておくとよいと思います。 また、foreach()を使用した場合はeach()とは異なり内部ポインタを自動的に先頭に移動してくれるので、この煩わしさはなくなります。

 $hash = array('a'=>'1', 'b'=>'2', 'c'=>'3');
 foreach ($hash as $key => $value) {
   print "$key = $value";
 }

 [結果]
  a = 1
  b = 2
  c = 3


11)指定した値で配列の要素を埋める
 配列の長さが指定の長さになるまで特定の値で要素を埋めるにはarray_pad()を使用します。 長さに正の数値を指定すると配列の末尾側を、負の数値を指定すると配列の先頭側を指定した値で埋めます。 指定した長さが元の配列より短い場合は何もしません。

 配列 = array_pad(配列, 長さ, 値);

12)配列のキーを大文字か小文字に一括変換する
 配列のキーを一括して大文字か小文字に変換するにはarray_change_key_case()を使用します。 オプションに指定できる定数はCASE_UPPER(大文字変換)とCASE_LOWER(小文字変換)があります。 デフォルトはCASE_LOWERです。

 配列 = array_change_key_case(配列, [オプション]);

13)配列のキーと値を入れ替える
 配列のキーと値を入れ替えるにはarray_flip()を使用します。 値が同じ要素が複数あった場合は、最後の要素が有効になり、他の要素は無視されます。

 配列 = array_flip(配列);

14)配列の内部ポインタを操作する
 配列の内部ポインタを操作するには以下の4つの関数を使用します。
 ・配列の最初の要素を取得する  :reset()
 ・現在の要素の次の要素を取得する:next()
 ・現在の配列の前の要素を取得する:prev()
 ・配列の最後の要素を取得する  :end()
 値が空の要素があった場合、next() や prev() は false を返します。

 配列の最初の要素 = reset(配列);
 現在の要素の次の要素 = next(配列);
 現在の配列の前の要素 = prev(配列);
 配列の最後の要素 = end(配列);

15)配列の要素の値の合計を算出する
 配列の要素の値の合計を算出するにはarray_sum()を使用します。 要素に文字列が含まれていてもエラーになることはありません。 文字列が数値に変換できるものは数値として計算され、変換できないものは「0」とみなされます。

 合計値 = array_sum(配列)

16)重複する値を配列から除去する
 配列から重複する要素を除去するにはarray_unique()を使用します。 この関数を使用すると、同値の要素は最初の要素以外はすべて削除されます。 また、文字列の「1」と数値の「1」は同値とみなされます。

 配列 = array_unique(配列);

17)配列の要素を検索する
 配列の要素を検索するにはarray_search()in_array()を使用します。 これらの関数は、配列の要素に指定した値をもつものがあるかどうかを検索します。 検索語は大文字と小文字を区別します。
 array_search()は、検索語が見つかった場合、その要素のキーを返します。 見つからなかった場合は、何も返しません。
 in_array()は、配列内に検索語があるかどうかを調べます。 オプションで型チェックを指定したすると、型が一致するかどうかを判定できます。 検索語が見つかった場合は true を返し、見つからなかった場合は false を返します。

 キー = array_search(検索語, 配列);
 論理値 = in_array(検索語, 配列, [型チェック(true|false)]);

18)複数の配列の要素で唯一の要素を抽出する
 ある配列の中に、他の配列にはない要素を抽出するにはarray_diff()を使用します。 第一引数に指定した配列のうち、第二引数以降の配列にはない要素の配列を返します。

 配列 = array_diff(配列, 配列, [配列...]);

19)複数の配列に共通する要素を抽出する
 ある配列と、他の配列に共通する要素を抽出するにはarray_intersect()を使用します。 第一引数に指定した配列と、第二引数以降の配列に共通する要素の配列を返します。

 配列 = array_intersect(配列, 配列, [配列...]);

20)複数の配列を1つの配列にする
 複数の配列を合わせて1つの配列にするにはarray_merge()array_merge_recursive()を使用します。 array_merge関数を使用すると、連想配列の場合、同じキーのものは上書きされ、最後の要素が有効になります。 同じキーのものを上書きしたくない場合は、array_merge_recursive()を使用します。

 配列 = array_merge(配列, 配列, [配列...]);
 配列 = array_merge_reqursive(配列, 配列, [配列...]);

21)配列の要素の順序を逆転する
 配列の要素の順序を逆転するにはarray_reverse()を使用します。 引数に渡した配列の要素の順序を逆転した配列を返します。 引数に渡した配列の要素の順序は変わりません。 オプションのフラグに true を指定するとキーと値の関係を保持したまま逆転します。 デフォルトは false です。

 配列 = array_reverse(配列, [フラグ]);

22)一定範囲の整数を値とする配列を作成する
 一定範囲の整数を値とする配列を作成するにはrange()を使用します。 例えば「1」から「10」までの連続する整数を値とする配列を作成する場合に有効です。 また、開始値が終了値より大きくなるようにすると降順の配列を作成することができます。

 配列 = range(開始値, 終了値);

23)配列の要素をシャッフルする
 配列の要素をシャッフルするにはshuffle()を使用します。 配列の要素の順序をランダムに変更することができます。 この関数は返り値がありません。 引数に指定した配列を変更します。 この関数を使う前にsrand()を使用して、乱数発生器を初期化する必要があります。

 shuffle(配列);

24)配列をキーで並べ替える
 配列をキーで並べ替えるにはksort()krsort()を使用します。 ksort()が昇順、krsort()が降順に並べ替える関数です。 この関数は返り値がありません。 引数に指定した配列を並べ替えます。 オプションに指定可能な定数には以下のものがあります。

   SORT_REGULAR : 標準的な並べ替え
   SORT_NUMERIC : 数値として並べ替え
   SORT_STRING : 文字列として並べ替え

 ksort(配列, [オプション]);
 krsort(配列, [オプション]);

25)配列を値で並べ替える
 配列を値で並べ替えるにはsort()rsort()を使用します。 sort()が昇順、rsort()が降順に並べ替える関数です。 これらの関数を使用して連想配列の並べ替えを行うと、キーが失われ、添字配列になってしまいますので注意が必要です。 連想配列の並べ替えを行うには、asort()arsort()を使用しましょう。 また、オプションに指定可能な定数には以下のものがあります。

   SORT_REGULAR : 標準的な並べ替え
   SORT_NUMERIC : 数値として並べ替え
   SORT_STRING : 文字列として並べ替え

 sort(配列, [オプション]);
 rsort(配列, [オプション]);

26)配列のキーと値の関係を崩さずに並べ替える
 連想配列の並べ替えを行うにはasort()arsort()を使用します。 asort()が昇順、arsort()が降順に並べ替える関数です。 sort()rsort()を使用して連想配列の並べ替えを行うと、キーが失われてしまいますが、 これらの関数を使用して連想配列の並べ替えを行えば、キーと値の関係を崩すことはありません。 また、オプションに指定可能な定数には以下のものがあります。

   SORT_REGULAR : 標準的な並べ替え
   SORT_NUMERIC : 数値として並べ替え
   SORT_STRING : 文字列として並べ替え

 asort(配列, [オプション]);
 arsort(配列, [オプション]);

27)配列を自然順に並べ替える
 人間が行うように自然な順序で並べ替えを行うにはnatsort()natcasersort()を使用します。 natsortは大文字と小文字を区別してしまいますが、natcasesort()は大文字と小文字を区別しないで並べ替えを行うことができます。

 natsort(配列);
 natcasersort(配列);

28)変数を連想配列にまとめる
 複数の変数をまとめて連想配列を作成するにはcompact()を使用します。

 compact(変数名, 変数名, [変数名...]);
 compact(変数名を格納した配列);

29)連想配列を変数に展開する
 compact()とは逆に連想配列を変数に展開するにはextract()を使用します。 添字配列にこの関数を使用しても変数に展開できません。 添字配列を変数に展開するには、list()を使用してください。 オプションで変数名がバッティングしてしまったときにどう処理するかを指定することができます。

   EXTR_OVERWRITE : 同名の変数を上書き
   EXTR_SKIP : 同名の変数は無視
   EXTR_PREFIX_SAME : 同名の変数には接頭辞をつける
   EXTR_PREFIX_ALL : 展開したすべての変数に接頭辞をつける
   EXTR_PREFIX_INVALID : 展開した変数名が無効なときは接頭辞をつける

 オプションに接頭辞をつけるようにした場合は、変数名が「$接頭辞_変数名」になります。 また、接頭辞にアンダースコア「_」をつけると正常に動作しないことがありますので注意が必要です。

 変数の数 = extract(連想配列, [タイプ, 接頭辞]);

30)配列かどうかを調べる
 ある変数が配列かどうかを調べるにはis_array()を使用します。 引数で渡された変数が配列であれば true を、配列でなければ false を返します。

 論理値 = is_array(配列);

31)配列を連結して文字列にする
 配列のすべての要素をすべて繋げて1つの文字列にするにはimplode()join()を使用します。 どちらを使用しても結果は同じです。

 文字列 = implode(連結語, 配列);
 文字列 = join(連結語, 配列);

32)文字列を分解して配列にする
 文字列を特定の文字で区切って分解して配列にするにはexplode()split()を使用します。 split()では、分解文字に正規表現を使用することができますが、その分explode()より速度が遅くなります。 また、オプションで分解数を指定すると、その数だけ要素を作成します。

 配列 = explode(分解語, 文字列, [分解数]);
 配列 = split(分解語, 文字列, [分解数]);

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル