分類 | 関数 | 説明 |
---|---|---|
生成 | array | 配列を生成する |
range | ある範囲の整数を有する配列を作成する | |
compact | 変数名とその値から配列を作成する | |
要素数 | count | 変数に含まれるすべての要素、あるいはオブジェクトに含まれるプロパティの数を数える |
sizeof | countの別名 | |
キー | array_keys | 配列のキーすべて、あるいはその一部を返す |
array_change_key_case | 配列のすべてのキーを小文字もしくは大文字に変更する | |
array_flip | 配列のキーと値を反転する | |
値 | array_values | 配列のすべての値を返す |
値の設定 | array_fill | 配列を指定した値で埋める |
array_fill_keys | 配列を指定した値で埋める (指定されたキーのみ) | |
array_pad | 指定した要素数となるように、指定した値で配列を埋める | |
追加/削除 | array_push | 配列の末尾に1つ以上の要素を追加する |
array_pop | 配列の末尾から1つの要素を取り除く | |
array_shift | 配列の先頭から1つの要素を取り出す | |
array_unshift | 配列の先頭に1つ以上の要素を追加する | |
ソート | sort | 配列をソートする |
rsort | 配列を逆順にソートする | |
ksort | 配列をキーでソートする | |
krsort | 配列をキーで逆順にソートする | |
asort | 配列をソートする (連想キーと要素との関係を維持) | |
arsort | 配列を逆順にソートする (連想キーと要素との関係を維持) | |
natsort | 自然順アルゴリズムで配列をソートする | |
natcasesort | 大文字/小文字を区別しない自然順アルゴリズムで配列をソートする | |
usort | ユーザー定義の比較関数で配列を値でソートする | |
uksort | ユーザー定義の比較関数で配列をキーでソートする | |
uasort | ユーザー定義の比較関数で配列をソートする (連想キーと要素との関係を維持) | |
array_reverse | 要素を逆順にした配列を返す | |
array_multisort | 複数の多次元の配列をソートする | |
shuffle | 配列を要素をランダムに並べ替える (シャッフルする) | |
検索 | array_search | 指定した値を配列から検索し、見つかった場合に対応するキーを返す |
in_array | 配列に値があるかチェックする | |
array_key_exists | 指定したキーまたは添字が配列にあるかどうかを調べる | |
array_count_values | 配列の値の数を数える | |
置換 | array_replace | 渡された配列の要素を置き換える |
array_replace_recursive | 渡された配列の要素を再帰的に置き換える | |
array_splice | 配列の一部を削除し、他の要素で置き換える | |
抽出 | array_slice | 配列の一部を展開する |
array_filter | コールバック関数を使用して、配列の要素をフィルタリングする | |
array_rand | 配列から1つ以上の要素をランダムに取得する | |
差分 | array_diff | 配列の差を計算する |
array_diff_key | キーを基準にして配列の差を計算する | |
array_diff_assoc | 追加された添字の確認を含めて配列の差を計算する | |
array_diff_ukey | コールバック関数を用い、キーを基準にして配列の差を計算する | |
array_diff_uassoc | コールバック関数を用い、追加された添字の確認を含めて配列の差を計算する | |
array_udiff | データの比較にコールバック関数を用い、配列の差を計算する | |
array_udiff_assoc | データの比較にコールバック関数を用い、追加された添字の確認を含めて配列の差を計算する | |
array_udiff_uassoc | データと添字の比較にコールバック関数を用い、追加された添字の確認を含めて配列の差を計算する | |
マージ | array_merge | 1つまたは複数の配列をマージする |
array_merge_recursive | 2つ以上の配列を再帰的にマージする | |
array_combine | 一方の配列をキーとし、もう一方の配列を値として、1つ配列を生成する | |
重複 | array_unique | 配列から重複した値を削除する |
構造 | array_chunk | 配列を分割する |
走査 | current | 配列内の現在の要素を返す |
pos | currentの別名 | |
key | 配列から現在のキーを返す | |
each | 配列から現在のキーと値のペアを返して、内部ポインタ (カーソル) を進める | |
next | 配列の内部ポインタを進める | |
prev | 配列の内部ポインタを前に戻す | |
reset | 配列の内部ポインタを先頭要素にセットする | |
end | 配列の内部ポインタを最終要素にセットする | |
関数の適用 | array_walk | 配列のすべての要素にユーザー関数を適用する |
array_walk_recursive | 配列のすべての要素にユーザー関数を再帰的に適用する | |
array_map | 指定した配列の要素にコールバック関数を適する | |
演算 | array_sum | 配列の値の和を計算する |
array_product | 配列の値の積を計算す | |
共通項 | array_intersect | 配列の共通項を計算する |
array_intersect_key | キーを基準にして配列の共通項を計算する | |
array_intersect_assoc | 追加された添字の確認も含めて配列の共通項を確認する | |
array_intersect_ukey | コールバック関数を用い、キーを基準にして配列の共通項を計算する | |
array_intersect_uassoc | コールバック関数を用い、追加された添字の確認も含めて配列の共通項を確認する | |
array_uintersect | データの比較にコールバック関数を用い、配列の共通項を計算する | |
array_uintersect_assoc | データの比較にコールバック関数を用い、追加された添字の確認も含めて配列の共通項を計算する | |
array_uintersect_uassoc | データと添字の比較にコールバック関数を用い、追加された添字の確認も含めて配列の共通項を計算する | |
結合 | array_reduce | コールバック関数を用いて配列を普通の値に変更することにより、配列を再帰的に減らす |
シンボルテーブル | extract | 配列からシンボルテーブルに変数をインポートする (compactの逆) |
変数への代入 | list | 配列と同様の形式で、複数の変数への代入を行う |
配列は、array()関数により生成できます。
$a = array();PHP: array - Manual
PHP 5.4以降では、次のような短縮構文も使用できます。
$a = [];
角かっこ構文を使用します。
$a[] = value;
添字を指定するとき、それが存在しないならば新しい要素として追加されます。
$a[ key ] = value;
添字 (key) には整数、文字列または変数を使用できます。
$a = array(); $a[ ] = 1; $a[ 'a' ] = 2; $a[ 5 ] = 3; $a[ ] = 4; $a[ 4 ] = 5; $a[ ] = 6; print_r( $a ); // Array // ( // [0] => 1 // [a] => 2 // [5] => 3 // [6] => 4 // [4] => 5 // [7] => 6 // )
array_push()関数を使用して追加する方法もありますが、この関数は複数の要素を追加するためのものです。ひとつの要素を追加するだけならば、添字を指定せずに$array[]=
と記述します。このように追加された要素には、最大値となる添字が設定されます。
int array_push ( array &$array , mixed $var1 [, mixed $var2... ] )PHP: array_push - Manual
配列$arrayに変数$var1、$var2…を追加し、追加後の配列の長さを返します。
$a = array( 1, 2, 3 );
// Array ( [0] => 1 [1] => 2 [2] => 3 )
PHP: array - Manual
末尾にカンマを置く構文も有効であり、
$a = array( 1, 2, 3, );
としても、カンマのない場合と同じ結果となります。
$a = array( 1, 2, 10=>3, 4 );
// Array ( [0] => 1 [1] => 2 [10] => 3 [11] => 4 )
添字を整数で指定すると、後に続く要素にはその数値に続く番号が割り当てられます。
すでに使用されている添字を指定すると、
$a = array( 1, 0=>2 );
// Array ( [0] => 2 )
のようになり、先のものが上書きされます。
$a = array( 'one'=>1, 'two'=>2, 'three'=>3 );
// Array ( [one] => 1 [two] => 2 [three] => 3 )
$a = array( 'one', '02'=>2, 03=>'three' );
// Array ( [0] => one [02] => 2 [3] => three )
数値として意味が同じ添字を、整数と文字列で指定すると、
$a = array( 0=>'A', '0'=>'B', '00'=>'C' );
// Array ( [0] => B [00] => C )
のようになり、先のものが上書きされます。
Stringのexplode()関数は、文字列を分割して配列を作成します。
array compact ( mixed $varname [, mixed $... ] )PHP: compact - Manual
変数名をキーとして、その値とともに配列を作成します。
$a = 1; $b = 2; $c = 3; $array = compact( 'a', 'b', 'c' ); // Array // ( // [a] => 1 // [b] => 2 // [c] => 3 // )
引数の$varnameには、変数の名前を文字列で指定します。変数を渡すのではありません。
引数は配列でも渡せます。
$array = compact( array( 'a', 'b', 'c' ) );
int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] )PHP: count - Manual
$a = array( 'a', 10=>'b', 'foo'=>'c' ); echo $a[ 0 ]; // 'a' echo $a[ 10 ]; // 'b' echo $a[ 'foo' ]; // 'c'
添字は、波かっこで囲っても同じです。
echo $a{ 0 }; // 'a' echo $a{ 10 }; // 'b' echo $a{ 'foo' }; // 'c'
存在しない要素から読み込むと、設定によっては注意されます。
echo $a[ 5 ]; // Notice: Undefined offset: 5
存在するかどうかは、array_key_exists()で確認できます。
$x = 1;
$a[ $x ] = 10; // $a[ 1 ] = 10; に等しい
なぜ、$foo[bar] は使用できないのか?
添字を配列で指定するならば、
$p = array( 1, 2, 3 );
$a[ $p[ 1 ] ] = 10; // $a[ 2 ] = 10; に等しい
とします。
関数やメソッドが配列を返す場合、PHP 5.4以降ではそれに添字を指定してアクセスできます。
$x = Func()[ 0 ];
それ以前の環境では、次のように変数に代入してからアクセスする必要があります。
$p = Func(); $x = $p[ 0 ];
変数の破棄と同様に、unset()で要素を削除できます。PHP: unset - Manual
$a = array( 1, 2, 3 ); unset( $a[ 1 ] ); print_r( $a ); // Array // ( // [0] => 1 // [2] => 3 // )
ただしこの例のように、削除した要素以降の添字は変更されないことに注意が必要です。もし添字が連番になるように処理したいならば、array_splice()を使用します。
$a = array( 1, 2, 3 ); array_splice( $a, 1, 1 ); print_r( $a ); // Array // ( // [0] => 1 // [1] => 3 // )
foreach内で要素を削除するには、その要素のキーを使用します。
$a = array( 1, 2, 3 ); print_r( $a ); foreach( $a as $key=>$val ) { if( $val == 2 ) { unset( $a[ $key ] ); } } print_r( $a );php - Unsetting array values in a foreach loop - Stack Overflow
array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )PHP: array_unique - Manual
配列$arrayから重複を取り除いて、新しい配列を返します。要素が重複した場合には、最初の要素のキーが新しい配列でのキーとなります。
$a = array( 'a'=>5, 'b'=>4, 'c'=>4, 'd'=>1 ); print_r( array_unique( $a ) ); // Array // ( // [a] => 5 // [b] => 4 // [d] => 1 // )
$sort_flagsで、重複の判定のための比較方法を指定できます。
$a = array( 1, 1.0, '1.0', TRUE, 'A', 'a' ); print_r( array_unique( $a ) ); print_r( array_unique( $a, SORT_NUMERIC ) ); print_r( array_unique( $a, SORT_REGULAR ) ); // Array // ( // [0] => 1 // [2] => 1.0 // [4] => A // [5] => a // ) // Array // ( // [0] => 1 // [4] => A // ) // Array // ( // [0] => 1 // [1] => 1 // [4] => A // [5] => a // )
配列の要素全体をまとめて処理するにはforeach構文を使用します。
foreach( $array as $value )PHP: foreach - Manual
配列$arrayの要素が反復処理され、要素の値が変数$valueにコピーされます。
foreach( $array as $key=>$value )
こちらの構文では要素のキーが変数$keyに、値が$valueにコピーされます。
$array = array( 'item1'=>'a', 'item2'=>'b', 'item3'=>'c', ); foreach( $array as $key=>$value ) { echo "$key - $value \r\n"; } // 出力 // item1 - a // item2 - b // item3 - c
foreach( $array as &$value )
通常は変数$valueへは、要素のコピーが渡されます。もし配列の要素へ作用を及ぼしたいのならば、変数名の前に&をつける参照渡しで参照を取得するようにします。
$a = array( 1, 2, 3 ); foreach( $a as &$val ) { $val *= 2; } unset( $val ); print_r( $a ); // Array // ( // [0] => 2 // [1] => 4 // [2] => 6 // )
ループを抜けた後も変数$valueは最後の要素への参照を保持しているため、安全のためunset()でそれを解除するようにします。
$a = array( array( 1, 2, 3 ), array( 4, 5, 6 ) ); print_r( $a ); // Array // ( // [0] => Array // ( // [0] => 1 // [1] => 2 // [2] => 3 // ) // [1] => Array // ( // [0] => 4 // [1] => 5 // [2] => 6 // ) // )
多次元配列には次のようにアクセスします。他方それが未定義の配列要素ならば、 それが多次元配列として作成されます。
$a[ 0 ][ 0 ] = 1; $a[ 0 ][ 1 ] = 2; $a[ 0 ][ 2 ] = 3; $a[ 1 ][ 0 ] = 4; $a[ 1 ][ 1 ] = 5; $a[ 1 ][ 2 ] = 6;
その配列が連想配列で、指定のキーに一致する要素を得たいだけならば、そのキーを添字に指定してアクセスします。ただしそのキーが配列に存在しない可能性があるならば、先にarray_key_exists()で確認すべきです。
$a = array( 'a'=>1, 'b'=>2, 'c'=>3 ); echo $a[ 'b' ]; // 2 echo $a[ 'd' ]; // Notice: Undefined index
指定した値に一致する要素を検索します。
mixed array_search ( mixed $needle , // 検索する要素の値 array $haystack // 検索対象の配列 [, bool $strict = FALSE ] // TRUEの場合、型の一致またはオブジェクトの同一性も考慮します )PHP: array_search - Manual
配列$haystackの値から$needleを検索し、一致する要素のキーを返します。一致する要素が多数ある場合には、最初にマッチしたキーが返されます。一致する要素がない場合にはFALSEが返されます。
$strictにTRUEが指定された場合には、オブジェクトの同一性も考慮します。
$a = array( 1, 2, 3 ); $b = array( 'a'=>1, 'b'=>2, 'c'=>3 ); $c = array( 'a'=>'A', 'b'=>'B', 'c'=>'C' ); echo array_search( 2, $a ); // 1 echo array_search( 2, $b ); // 'b' echo array_search( 'B', $c ); // 'b' echo array_search( '2', $a ); // 1 echo array_search( '2', $a, TRUE ); // FALSE
bool in_array ( mixed $needle , // 検索する要素の値 array $haystack // 検索対象の配列 [, bool $strict = FALSE ] )PHP: in_array - Manual
基本的にarray_search()と同じです。違いは一致した場合の戻り値で、要素のキーではなくTRUEが返されます。
bool array_key_exists ( mixed $key , // 検索する要素のキー array $search // 検索対象の配列 )PHP: array_key_exists - Manual
in_array()に似ていますが、検索対象が要素の値ではなくキーです。
この関数をオブジェクトに対して用いることはPHP 7.4.0以降で非推奨となっています。そのような用途にはproperty_exists()を用います。注意 - PHP: array_key_exists - Manual
property_exists( object|string $object_or_class, string $property ): boolPHP: property_exists - Manual
array array_count_values ( array $input )PHP: array_count_values - Manual
array array_splice( array &$input , int $offset [, int $length [, mixed $replacement = array() ]] )PHP: array_splice - Manual
$offsetから$length個の要素を削除し、$replacementで置換します。$replacementを省略すると、削除のみが行われます。
戻り値で、削除された要素の配列が返されます。
すべての配列関数は、配列自身を変更します。
ソートの基準 | ソート順 | キーと値の関係 | |
---|---|---|---|
維持しない | 維持する | ||
値 | 昇順 ▲ | sort() | asort() |
降順 ▼ | rsort() | arsort() | |
ユーザー定義 | usort() | uasort() | |
ランダム | shuffle() | --- | |
自然順 | --- | natsort() | |
自然順 (大文字/小文字を区別しない) |
--- | natcasesort() | |
キー | 昇順 ▲ | --- | ksort() |
降順 ▼ | --- | krsort() | |
ユーザー定義 | ---- | uksort() |
bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )PHP: sort - Manual
引数の$array自身をソートします。
bool usort ( array &$array , // 配列 callable $cmp_function // 比較関数 )PHP: usort - Manual
function cmp( $a, $b ) { if( $a == $b ) { return 0; } return ( $a < $b )? -1 : 1; } $x = array( 3, 2, 5, 6, 3 ); usort( $x, 'cmp' ); print_r( $x ); // Array // ( // [0] => 2 // [1] => 3 // [2] => 3 // [3] => 5 // [4] => 6 // )
無名関数を使用すれば、この処理は
usort( $x, function( $a, $b ) { if( $a == $b ) { return 0; } return ( $a < $b )? -1 : 1; } );
のように記述できます。
また次のような連想配列を要素に持つ多次元配列を、その文字列の要素の順でソートする場合には、次のようにします。
$x = array( array( 'foo'=>'ab', 'bar'=>1 ), array( 'foo'=>'aa', 'bar'=>2 ), array( 'foo'=>'ac', 'bar'=>3 ) ); usort( $x, function( $a, $b ) { return strcmp( $a[ 'foo' ], $b[ 'foo' ] ); } ); print_r( $x ); // Array // ( // [0] => Array( [foo] => aa [bar] => 2 ) // [1] => Array( [foo] => ab [bar] => 1 ) // [2] => Array( [foo] => ac [bar] => 3 ) // )
array array_merge( array $array1 [, array $... ] )array array_merge ( array $array1 [, array $... ] )
配列結合演算子 (+) でも配列をマージできますが、数値添字要素の扱いと、要素のキーが重複したときの挙動がarray_merge()とは異なります。PHP: 配列演算子 - Manual
添字の種類 | array_merge() | 配列結合演算子 | ||
---|---|---|---|---|
添字の扱い | 重複の発生時 | 添字の扱い | 重複の発生時 | |
数値 | 数値は無視され、ゼロからの連番に置換される。 | 数値が無視されるため、発生しない。 | 保存される。 | 後の要素が失われる。 |
文字列 | 保存される。 | 先の要素が失われる。 |
$r1 = array( 1, 'a'=>2, 'b'=>3 ); $r2 = array( 4, 'a'=>5, 'c'=>6 ); print_r( array_merge( $r1, $r2 ) ); // Array // ( // [0] => 1 // [a] => 5 // [b] => 3 // [1] => 4 // [c] => 6 // ) print_r( $r1 + $r2 ); // Array // ( // [0] => 1 // [a] => 2 // [b] => 3 // [c] => 6 // )
文字列の関数implode()で、配列を1つの文字列に連結できます。