PHP - 配列
公開日:2020-12-22 更新日:2020-12-22
[PHP]
1. 概要
配列を使うと、1つの変数で、複数の値を保持することができます。主に、同じ種類の値を複数保持する際に使用します。
各値は、変数名の後ろに角括弧 [ ] を付け、[ ] の中に 0 から始まるインデックスと言う連番を指定すると参照できます。
配列を生成するには、array( ) または [ ] を使います。
各値は、変数名の後ろに角括弧 [ ] を付け、[ ] の中に 0 から始まるインデックスと言う連番を指定すると参照できます。
変数[インデックス] = 値; //代入
var_dump( 変数[インデックス] ); //取得
配列を生成するには、array( ) または [ ] を使います。
変数 = array(値, 値, 値, 値, ...);
または
変数 = [値, 値, 値, 値, ...];
2. 使用例
次の例では、複数の名前を、配列に入れて、各要素を取得しています。
$names = ['ichiro', 'jiro', 'saburo', 'shiro'];
var_dump( $names[0] );
var_dump( $names[1] );
var_dump( $names[2] );
var_dump( $names[3] );
実行結果string(6) "ichiro"
string(4) "jiro"
string(6) "saburo"
string(5) "shiro"
3. 配列の要素数の取得
配列の要素数は、count( ) で取得できます。
$names = ['ichiro', 'jiro', 'saburo', 'shiro'];
var_dump( count($names) );
実行結果int(4)
4. 変数によるインデックスの指定
[ ] のインデックスは、変数で指定することもできます。
$names = ['ichiro', 'jiro', 'saburo', 'shiro'];
$idx = 3;
var_dump( $names[$idx] );
実行結果string(5) "shiro"
5. ループによる全要素の取得
for とあわせて使うと、配列の全ての要素を簡単に参照することができます。
要素数が増減しても、処理を変える必要はありません。
また、for の代わりに foreach を使うと、簡単に参照することができます。
次の例は上の例と同じ結果になります。
要素数が増減しても、処理を変える必要はありません。
$names = ['ichiro', 'jiro', 'saburo', 'shiro'];
for ($i = 0; $i < count($names); $i++) {
var_dump( $names[$i] );
}
実行結果string(6) "ichiro"
string(4) "jiro"
string(6) "saburo"
string(5) "shiro"
また、for の代わりに foreach を使うと、簡単に参照することができます。
次の例は上の例と同じ結果になります。
$names = ['ichiro', 'jiro', 'saburo', 'shiro'];
foreach ($names as $name) {
var_dump( $name );
}
6. 要素の追加
インデックスを指定せずに [ ] だけにして代入すると、配列の最後に要素が追加されます。
$names = [];
$names[] = 'ichiro';
$names[] = 'jiro';
$names[] = 'saburo';
var_dump( $names );
実行結果array(3) {
[0]=>
string(6) "ichiro"
[1]=>
string(4) "jiro"
[2]=>
string(6) "saburo"
}
7. 要素の削除
配列の要素を削除するには、unset( ) を使います。
引数には、削除する要素を指定します。
unset( ) で削除した場合、削除したインデックスは空き番になります。
上記の場合、[2] が抜けています。
インデックスを詰めたい場合は、array_values( ) で、インデックスを詰めた配列を取得できます。
但し、空き番があっても、foreach などで各要素に参照することはできるため、
本当にインデックスを詰める必要があるか検討してください。
引数には、削除する要素を指定します。
$ary = ['a', 'b', 'c', 'd', 'e'];
unset($ary[2]);
var_dump($ary);
実行結果array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[3]=>
string(1) "d"
[4]=>
string(1) "e"
}
unset( ) で削除した場合、削除したインデックスは空き番になります。
上記の場合、[2] が抜けています。
インデックスを詰めたい場合は、array_values( ) で、インデックスを詰めた配列を取得できます。
但し、空き番があっても、foreach などで各要素に参照することはできるため、
本当にインデックスを詰める必要があるか検討してください。
$ary = ['a', 'b', 'c', 'd', 'e'];
unset($ary[2]);
$ary = array_values($ary);
var_dump($ary);
実行結果array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "d"
[3]=>
string(1) "e"
}
8. 先頭の要素の取得と削除
array_shift( ) を使うと、配列の先頭の要素の取得と、その要素の削除をすることができます。
配列を、先入れ先出しのキュー構造として使えます。
配列を、先入れ先出しのキュー構造として使えます。
$names = ['ichiro', 'jiro', 'saburo'];
$name = array_shift($names);
var_dump( $names );
var_dump( $name );
実行結果array(2) {
[0]=>
string(4) "jiro"
[1]=>
string(6) "saburo"
}
string(6) "ichiro"
9. 最後の要素の取得と削除
array_pop( ) を使うと、配列の最後の要素の取得と、その要素の削除をすることができます。
配列を、後入れ先出しのスタック構造として使えます。
配列を、後入れ先出しのスタック構造として使えます。
$names = ['ichiro', 'jiro', 'saburo'];
$name = array_pop($names);
var_dump( $names );
var_dump( $name );
実行結果array(2) {
[0]=>
string(6) "ichiro"
[1]=>
string(4) "jiro"
}
string(6) "saburo"
10. 配列の先頭に要素の追加
array_unshift( ) で、配列の先頭を要素を追加できます。
1番目の引数には配列を指定して、2番目以降に、追加したい要素を複数指定できます。
1番目の引数には配列を指定して、2番目以降に、追加したい要素を複数指定できます。
$names = ['ichiro', 'jiro', 'saburo'];
array_unshift($names, 'test1', 'test2', 'test3');
var_dump( $names );
実行結果array(6) {
[0]=>
string(5) "test1"
[1]=>
string(5) "test2"
[2]=>
string(5) "test3"
[3]=>
string(6) "ichiro"
[4]=>
string(4) "jiro"
[5]=>
string(6) "saburo"
}
10. 配列の最後に要素の追加
array_push( ) で、配列の先頭を要素を追加できます。
1番目の引数には配列を指定して、2番目以降に、追加したい要素を複数指定できます。
次のようにしても配列の最後に要素を追加できるため、
通常はこちらの書き方で書くことが多いと思います。
1番目の引数には配列を指定して、2番目以降に、追加したい要素を複数指定できます。
$names = ['ichiro', 'jiro', 'saburo'];
array_push($names, 'test1', 'test2', 'test3');
var_dump( $names );
実行結果array(6) {
[0]=>
string(6) "ichiro"
[1]=>
string(4) "jiro"
[2]=>
string(6) "saburo"
[3]=>
string(5) "test1"
[4]=>
string(5) "test2"
[5]=>
string(5) "test3"
}
次のようにしても配列の最後に要素を追加できるため、
通常はこちらの書き方で書くことが多いと思います。
$names[] = 'test1';
$names[] = 'test2';
$names[] = 'test3';
配列をスタック構造として使う場合は、あえて array_push( ) を使うのも良いかもしれません。11. 要素の置換(挿入、削除)
array_splice( ) を使うと、配列の一部分を、他の要素に置換できます。
処理としては、指定された範囲の要素を削除して、その場所に要素を挿入しています。
これを利用すると、置換だけでなく、要素の挿入や削除も行えます。
置換。インデックス 2 以降の 3 つの要素を、'c', 'd' に置換します。
挿入。3番目の引数(置換する個数)を 0 にします。
削除。4番目の引数(置換後の要素)を未指定にします。
処理としては、指定された範囲の要素を削除して、その場所に要素を挿入しています。
これを利用すると、置換だけでなく、要素の挿入や削除も行えます。
array_splice(配列, 置換元の位置, 個数, 置換する要素);
置換。インデックス 2 以降の 3 つの要素を、'c', 'd' に置換します。
$ary = ['a', 'b', '_', '_', '_', 'e'];
array_splice($ary, 2, 3, ['c', 'd']);
var_dump($ary);
実行結果array(5) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
[4]=>
string(1) "e"
}
挿入。3番目の引数(置換する個数)を 0 にします。
$ary = ['a', 'b', 'e'];
array_splice($ary, 2, 0, ['c', 'd']);
var_dump($ary);
実行結果array(5) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
[4]=>
string(1) "e"
}
削除。4番目の引数(置換後の要素)を未指定にします。
$ary = ['a', 'b', '_', '_', '_', 'c'];
array_splice($ary, 2, 3);
var_dump($ary);
実行結果array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
12. 要素の検索
$ary = ['a', 'b', 'c', 'd', 'e'];
$idx = array_search('c', $ary);
var_dump($idx);
var_dump($ary[$idx]);
##/e##
実行結果int(2)
string(1) "c"
注意事項
要素が見つからなかった場合、false を返します。
false は 0 としても扱われるため、次の例の最初の if は true となります。
見つからない可能性がある場合は、=== で判定するようにしてください。
$ary = ['a', 'b', 'c', 'd', 'e'];
$idx = array_search('xxx', $ary);
var_dump($idx);
//間違った判定方法($idx が false の時も true になる)
if ($idx >= 0) {
print("見つかりました。\n");
var_dump($ary[$idx]);
}
//正しい判定方法
if ($idx === false) {
print("見つかりませんでした。\n");
}
実行結果bool(false)
見つかりました。
string(1) "a"
見つかりませんでした。
13. その他
要素の有無
配列のソート
配列の一部分の取得
配列のマージ(結合)
$ary1 と $ary2 は元のままです。
$ary = ['a', 'b', 'c', 'd', 'e'];
if (in_array('c', $ary)) {
print("あるよ");
}
実行結果あるよ
配列のソート
$ary = ['e', 'd', 'c', 'b', 'a'];
sort($ary);
var_dump($ary);
実行結果array(5) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
[4]=>
string(1) "e"
}
配列の一部分の取得
$ary = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
$ary2 = array_slice($ary, 2, 3);
var_dump($ary2);
実行結果array(3) {
[0]=>
string(1) "c"
[1]=>
string(1) "d"
[2]=>
string(1) "e"
}
配列のマージ(結合)
$ary1 と $ary2 は元のままです。
$ary1 = ['a', 'b', 'c'];
$ary2 = ['d', 'e', 'f'];
$ary3 = array_merge($ary1, $ary2);
var_dump($ary3);
実行結果array(6) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
[4]=>
string(1) "e"
[5]=>
string(1) "f"
}