1. ホーム 
  2. 備忘録 
  3. PHP

配列の操作

配列操作の関数一覧

関数 用途
sort/rsort 配列を 昇順/降順 にソートする
asort/arsort 連想キーと要素との関係を維持しつつ配列を 昇順/降順 にソートする
usort ユーザー定義の比較関数を使用して、配列を値でソートする
compact 変数名とその値から配列を作成する
extract 配列からシンボルテーブルに変数をインポートする
count 配列または Countable オブジェクトに含まれるすべての要素の数を数える
current 配列内の現在の要素を返す
next 配列の内部ポインタを進める
prev 内部の配列ポインタをひとつ前に戻す
reset 配列の内部ポインタを先頭の要素にセットする
in_array 配列に値があるかチェックする
array_combine 一方の配列をキーとして、もう一方の配列を値として、ひとつの配列を生成する
array_map 指定した配列の要素にコールバック関数を適用する
array_fill 配列を指定した値で埋める
range ある範囲の整数を有する配列を作成する
array_shift 配列の先頭から要素を一つ取り出す
array_pop 配列の末尾から要素を取り除く
array_unshift 一つ以上の要素を配列の最初に加える
array_push 一つ以上の要素を配列の最後に追加する
array_replace 渡された配列の要素を置き換える
array_merge ひとつまたは複数の配列をマージする
array_reverse 要素を逆順にした配列を返す
array_search 指定した値を配列で検索し、見つかった場合に対応する最初のキーを返す

配列を 昇順/降順 にソートする sort/rsort

sort(array &$array, int $flags = SORT_REGULAR): true
rsort(array &$array, int $flags = SORT_REGULAR): true

array を値で 昇順/降順 にソートする

結果が等しくなる二つの要素があった場合、PHP 8.0.0 より前のバージョンでは並び順が不定だった

array パラメータの要素に対して新しいキーを割り当てる
その際、すでに割り当てられている既存のキーは削除してしまう

$array
入力の配列
$flags
ソートの動作を修正可能(詳細は参考文献1より)
戻り値
常に true を返す

連想キーと要素との関係を維持しつつ配列を 昇順/降順 にソートする asort/arsort

asort(array &$array, int $flags = SORT_REGULAR): true
arsort(array &$array, int $flags = SORT_REGULAR): true

配列のキーと要素との関係を維持しつつ、 array を 昇順/降順 にソートします

結果が等しくなる二つの要素があった場合、PHP 8.0.0 より前のバージョンでは並び順が不定だった

$array
入力の配列
$flags
ソートの動作を修正可能(詳細は参考文献1より)
戻り値
常に true を返す

ユーザー定義の比較関数を使用して、配列を値でソートする usort

usort(array &$array, callable $callback): true

順序を決めるユーザー定義の比較関数により、 array をその値でソートする

結果が等しくなる二つの要素があった場合、PHP 8.0.0 より前のバージョンでは並び順が不定だった

array パラメータの要素に対して新しいキーを割り当てる
その際、すでに割り当てられている既存のキーは削除してしまう

$array
入力の配列
$callback
比較関数は、最初の引数と二番目の引数の比較結果を返す
最初の引数のほうが二番目の引数より大きい場合は正の整数を、二番目の引数と等しい場合はゼロを、そして二番目の引数より小さい場合は負の整数を返す必要がある
そのため、宇宙船演算子と相性がよかったりする
戻り値
常に true を返す

変数名とその値から配列を作成する compact

compact(array|string $var_name, array|string ...$var_names): array

変数名とその値から配列を作成する
extract() とは逆の動作をする

$var_name / var_names
compact() がとるパラメータの数は可変である
各パラメータは、変数名を値とする文字列か、 変数名の配列のどちらかをとれる
与えられた文字列が示す変数が未定義の場合は E_NOTICE レベルのエラーを出す
戻り値
追加された全ての変数を値とする出力配列を返す

配列からシンボルテーブルに変数をインポートする extract

extract(array &$array, int $flags = EXTR_OVERWRITE, string $prefix = ""): int

配列からシンボルテーブルに変数をインポートする
compact() とは逆の動作をする

各キーについて変数名として有効であるかどうか、そして、シンボルテーブルの既存の変数と衝突しないかどうかを確認する

$array
連想配列を指定する
連想配列のキーを変数名、値を変数の値としてインポートする
既に定義されている変数と衝突した場合は $flags に設定された挙動をとる
$flags
無効な値や衝突時に関する制御をフラグで設定できる(詳細は参考文献1より)
$prefix
$flags での衝突時の制御が『接頭辞を付けて対処』であった場合に使用される
戻り値
シンボルテーブルにインポートした変数の数を返す

要素の数を数える count

count(Countable|array $value, int $mode = COUNT_NORMAL): int

配列または Countable オブジェクトに含まれるすべての要素の数を数える

配列の場合は、配列の全ての要素を数える
Countable インターフェイスを実装したオブジェクトの場合は、Countable::count() の戻り値を返す

$value
配列あるいは Countable オブジェクト
$mode
$mode が COUNT_RECURSIVE (または 1) にセットされた場合、count() は再帰的に配列をカウントする(多次元配列の全ての要素をカウントするといった場合に特に有効)
戻り値
value の要素の数を返す

配列内の現在の要素を返す current

current(array|object $array): mixed

各配列は、"カレント"の要素へのポインタを有している

このポインタは、配列に挿入された最初の要素を指すように初期化される

$array
配列
戻り値
内部ポインタが現在指している配列要素の値を返す。
この関数ではポインタはまったく移動しない
内部ポインタが最終要素の次を指していたり配列が空だったりした場合は false を返す

配列の内部ポインタを進める next

next(array|object &$array): mixed

next() は要素を返す前に内部配列ポインタをひとつ先に進める

$array
配列
戻り値
内部ポインタが現在指す次の配列要素の値を返す。最終要素を指していたり配列が空だったりした場合は false を返す

内部の配列ポインタをひとつ前に戻す prev

prev(array|object &$array): mixed

内部の配列ポインタをひとつ前に戻す

$array
配列
戻り値
内部ポインタが現在指す前の配列要素の値を返す。要素がない場合は false を返す

配列の内部ポインタを先頭の要素にセットする reset

reset(array|object &$array): mixed

reset() は、array の内部ポインタの先頭の要素に戻し、配列の最初の要素の値を返す

$array
配列
戻り値
配列の最初の要素の値を返す。配列が空なら false を返す

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

in_array(mixed $needle, array $haystack, bool $strict = false): bool

$haystack 内の $needle を検索する
$strict が設定されていない限りは型の比較は行わない

$needle
探す値
$haystack
配列
$strict
型まで厳密にチェックするかどうか
戻り値
配列で $needle が見つかった場合に true、それ以外の場合は、false を返す

2つの配列を元に配列を生成する array_combine

array_combine(array $keys, array $values): array

$keys 配列の値をキーとして、また $values 配列の値を対応する値として生成した配列を作成する

$keys
キーとして使用する配列
無効な値を渡すと文字列に変換される
$values
値として使用する配列
戻り値
作成した配列を返す

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

array_map(?callable $callback, array $array, array ...$arrays): array

$array ( および、それ以上の配列が与えられた場合は $arrays )の各要素に $callback を適用した後、適用後の要素を含む配列を返す

$callback
配列の各要素に適用する callable
複数の配列に zip 操作を行うために、$callback に null を渡すことができる
$array
コールバック関数を適用する配列
$arrays
$callback に渡す引数を指定する配列の可変リスト
戻り値
作成した配列を返す

配列を指定した値で埋める array_fill

array_fill(int $start_index, int $count, mixed $value): array

パラメータ $value を値とする $count 個のエントリからなる配列を用意する

$start_index
返される配列の最初のインデックス
$count
挿入する要素数
ゼロ以上の数でなければならない
$value
要素に使用する値
戻り値
作成した配列を返す

ある範囲の整数を有する配列を作成する range

range(string|int|float $start, string|int|float $end, int|float $step = 1): array

ある範囲の整数を有する配列を作成する

$start
シーケンスの最初の値
$end
値が $end に達するまでシーケンスが続く
$step
要素毎の増加(または減少)数となる
0や指定した範囲を超える値であってはならない
戻り値
start から end までの整数の配列を返す

配列の先頭から要素を一つ取り出す array_shift

array_shift(array &$array): mixed

$array の最初の値を取り出して返す

$array は、要素一つ分だけ短くなり、全ての要素は前にずれる

数値添字の配列のキーはゼロから順に新たに振りなおされるが、リテラルのキーには影響しない

$array
入力の配列
戻り値
取り出した値を返す
$array が空の場合や配列でない場合は null を返す

配列の末尾から要素を取り除く array_pop

array_pop(array &$array): mixed

$array の最後の要素の値を取り出して返す

$array は要素一つ分だけ短くなる

$array
入力の配列
戻り値
取り出した値を返す
$array が空の場合は null を返す

一つ以上の要素を配列の最初に加える array_unshift

array_unshift(array &$array, mixed ...$values): int

$array の先頭に指定された要素を加える
リストの要素は全体として加えられるため、 加えられた要素の順番は変わらないことに注意すること

配列の数値添字はすべて新たにゼロから振りなおされる
リテラルのキーについては変更されない

$array
入力の配列
$values
加える値
戻り値
処理後の $array の要素の数を返す

一つ以上の要素を配列の最後に追加する array_push

array_push(array &$array, mixed ...$values): int

$array の最後に指定された要素を加える
配列にひとつの要素を加えるだけなら $array[] = $value; のほうが関数呼び出しのオーバーヘッドがないため高速

$array
入力の配列
$values
加える値
戻り値
処理後の $array の要素の数を返す

渡された配列の要素を置き換える array_replace

array_replace(array $array, array ...$replacements): array

$array の値をそれ以降の配列の同じ要素の値で置き換える
最初の配列のキーと同じキーが2番目の配列にあれば、2番目の配列の値が最初の配列の値を上書きする
2番目の配列に存在するキーが最初の配列に存在しなければ、そのキーが新たに最初の配列内に作られる
最初の配列にしか存在しないキーについては変化しない
置き換え用の配列が複数渡された場合は渡した順に処理を行い、後から渡した配列の値のほうが優先される

$array
要素を置き換えたい配列
$replacements
置き換えたい要素を含む配列
後から渡した配列の値のほうが優先される
戻り値
置き換えたあとの配列を返す

ひとつまたは複数の配列をマージする array_merge

array_merge(array ...$arrays): array

前の配列の後ろに配列を追加することにより、ひとつまたは複数の配列の要素をマージし、得られた配列を返す
入力配列が同じキー文字列を有していた場合、そのキーに関する後に指定された値が、 前の値を上書きする
しかし、配列が同じ添字番号を有していても値は追記されるため、このようなことは起きない

$array
要素を置き換えたい配列
$replacements
置き換えたい要素を含む配列
後から渡した配列の値のほうが優先される
戻り値
置き換えたあとの配列を返す

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

array_reverse(array $array, bool $preserve_keys = false): array

配列を受け取って、要素の順番を逆にした新しい配列を返す

$array
入力の配列
$preserve_keys
true の場合は数値のキーを保持する
非数値のキーは、この設定にかかわらず常に保持される
戻り値
逆転させた配列を返す

array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false

$haystack 内の $needle を検索

$needle
検索したい値
$needle が文字列の場合、大文字小文字を区別して比較が行われる
$haystack
配列
$strict
true の場合は $haystack の中で $needle の厳密な型比較を実行する
戻り値
$needle が見つかった場合に配列のキー、 それ以外の場合に false を返す
最初にマッチした要素のキーのみを返すので、全てのマッチした要素のキーを取得する場合は array_keys() を使用すること

    参考文献

  1. 公式ドキュメント