この記事ではPHPでの配列の使い方をいろいろとご紹介します。
配列についての使い方は「配列の定義、値の追加、配列同士の結合、値の検索、値の削除」等があります。これは配列操作の基本とも言える部分になります。
本格的なシステムでも、簡易的なWEBアプリでも配列は当然の様に使用する事が多いと思いますので、しっかりと覚えておきましょう。
サンプルコードも交えて使い方を紹介していきますので、ぜひ参考にしてみて下さい。
コンテンツ
PHPで配列を使う(基本)
PHPで配列を使用する場合は以下の様に定義します。
配列の変数名 = [配列の要素1,配列の要素2,・・・];
例を見た方が分かりやすいので、例を見てみましょう。
以下は数値と文字列2つの配列を定義して、画面出力(print_r)しています。
■PHPコード
1 2 3 4 5 6 7 8 9 |
<?php #配列に数値を設定 $test_array = [1,2,3]; print_r($test_array); #配列に文字列を設定 $test_array = ["one","two","three"]; print_r($test_array); ?> |
■実行結果
1 2 3 4 5 6 7 8 9 10 11 12 |
Array ( [0] => 1 [1] => 2 [2] => 3 ) Array ( [0] => one [1] => two [2] => three ) |
配列が設定されている事が分かると思います。後はこの記述を応用するだけです。
初期化の仕方
PHPの場合、C言語等の様な配列の初期化はあまり気にする必要はないと思います。
上述の通り、同じ配列名で定義し直せば、簡単に配列の値も設定し直す事ができます。
ただ、明示的に初期化(空っぽ)にしたい場合は、$変数名 = array();と記述すれば初期化されます。
以下に簡単なサンプルを紹介します。
■PHPコード
1 2 3 4 5 |
<?php $test_array = [1,2,3]; $test_array = array(); print_r($test_array); ?> |
■実行結果
1 2 3 |
Array ( ) |
PHPの配列の値を取り出す
ここで配列の値を取り出す方法も覚えておきましょう。
foreachを使って配列の要素を順番に見ていき、全ての要素を出力しています。foreachで配列の値を取り出す場合は以下の様に記述します。
foreach(配列変数名 as ワーク変数名){}; ※ワーク変数に配列の値が順番に代入されます。
先ほどは配列の詳細を表示できるprint_rで画面出力しましたが、サンプルコードでは値を取り出すだけなのでechoを使って値を出力してみます。
※実際にコーディングする時にechoはよく使われます。
■PHPコード
1 2 3 4 5 6 |
<?php $test_array = ["one","two","three"]; foreach($test_array as $val){ echo $val."\n"; } ?> |
■実行結果
1 2 3 |
one two three |
特定の要素だけを取り出す場合
実際にシステムを作る場合は、配列の中身を全て取り出す様なコーディングよりも、特定の条件にマッチした要素だけを取り出すケースが多いのではないでしょうか。
foreachを使って配列の要素を探索して条件にマッチしたもの(この場合は”two”)だけを取り出す場合は、以下の様に記述します。
※ループの記述方法はいくつかあるので、自分の使い方やプロジェクトのルールに沿った記述にしましょう。
■PHPコード
1 2 3 4 5 6 7 8 9 |
<?php $test_array = ["one","two","three"]; foreach($test_array as $val){ if($val === "two") { echo $val."\n"; } } ?> |
■実行結果
1 |
two |
PHPで配列に値を追加する
次は配列に値を追加してみます。
単純に配列の最後に値を追加する場合は以下の様に記述します。
配列名[] = 追加する値;
実際のサンプルコードを見てみましょう!
■PHPコード
1 2 3 4 5 |
<?php $test_array = ["one","two","three"]; $test_array[] = "four"; #配列に値を追加 print_r($test_array); ?> |
■実行結果
1 2 3 4 |
one two three four |
PHPの配列結合
次は配列同士を結合してみましょう。
配列を結合する場合はarray_merge(結合したい配列1,結合したい配列2);を使用します。
実際にサンプルを見てみましょう。
■PHPコード
1 2 3 4 5 6 7 8 9 10 11 |
<?php $test_array1 = ["one","two","three"]; $test_array2 = ["four","five"]; #array_mergeの結果出力 print_r(array_merge($test_array1,$test_array2)); #array_mergeの結果を別の配列に設定して出力 $test_array = array_merge($test_array1,$test_array2); print_r($test_array); ?> |
■実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Array ( [0] => one [1] => two [2] => three [3] => four [4] => five ) Array ( [0] => one [1] => two [2] => three [3] => four [4] => five ) |
どちらも配列が結合されている事が分かると思います。
PHPの配列の値を検索
次は配列の中から値を検索してみましょう。
上述しているforeachを使って値を検索する方法もありますが、配列の何番目に値が存在するのかを知りたい場合があります。こんな時はarray_searchという関数を使うと一発で検索する事が可能です。
※配列から値を検索する場合は存在有無の判定か、配列の添え字を取得したいケースが大半だと思います。
array_searchは検索対象の型まで判定して検索する場合と、型は気にせずに検索する方法があります。
・型を判定する場合:array_search( 検索対象 , 配列名 , 型の指定有無 ); ※型を判定する場合は第3引数にTrueを設定します。
・型を判定しない場合:array_search( 検索対象 , 配列名); ※第3引数を指定しない場合は型の判定はしません。
実際に見てみた方が分かりやすいかもしれません。以下にサンプルコードを載せます。
■PHPコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $test_array = ["1","2","3","4","5"]; #文字列"3"を検索 $search_result = array_search("3",$test_array); echo $search_result."\n"; #数値"3"を検索 $search_result = array_search(3,$test_array); echo $search_result."\n"; #数値"3"を検索(型の比較あり) $search_result = array_search(3,$test_array,true); echo $search_result."\n"; #検索対象が存在しない #文字列"3"を検索(型の比較あり) $search_result = array_search("3",$test_array,true); echo $search_result."\n"; ?> |
■実行結果
1 2 3 4 |
2 2 2 |
array_searchで4回の検索を行っていますが、1回目、2回目は型に関わらずに3があれば配列の添え字(0から数えて2番目)を返しています。3回目は型がマッチしていないため対象の値が無い(つまり返却値は無し)状態、4回目は型の比較をした上で対象の値が存在しているので、添え字を返しています。
存在有無のみ判定する検索方法
値の存在有無のみ判定する場合は、in_arrayを使う事で判定検索する事が可能です。
array_searchと使い方は同じですが、戻り値が「true、false」になります。
■PHPコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $test_array = ["1","2","3","4","5"]; #文字列"3"を検索 $search_result = in_array("3",$test_array); var_dump($search_result); #数値"3"を検索 $search_result = in_array(3,$test_array); var_dump($search_result); #数値"3"を検索(型の比較あり) $search_result = in_array(3,$test_array,true); var_dump($search_result); #検索対象が存在しない #文字列"3"を検索(型の比較あり) $search_result = in_array("3",$test_array,true); var_dump($search_result); ?> |
■実行結果
1 2 3 4 |
bool(true) bool(true) bool(false) bool(true) |
PHPの配列の値の削除
PHPで配列の値を削除する方法はいくつかあります。
「切り取り」で複数の値を削除する
複数の値を削除する方法からご紹介します。
array_splice
array_spliceは別名「切り取り関数」とも言われます。配列の中から削除開始位置、終了位置を指定して特定の値を切り取ります。切り取った位置は詰められます。
記述方法は以下の通りになります。
array_splice(配列名,削除開始位置,削除終了位置);
サンプルコードで実際の使い方を見てみましょう。
■PHPコード
1 2 3 4 5 6 |
<?php $test_array = ["one","two","three","four","five"]; $result_array = array_splice($test_array,1,2); print_r($test_array); #切り取られた配列 print_r($result_array); #切り取った配列 ?> |
■実行結果
1 2 3 4 5 6 7 8 9 10 11 |
Array ( [0] => one [1] => four [2] => five ) Array ( [0] => two [1] => three ) |
array_diff&array_values
array_diffも切り取り関数とも言われますが、ちょっと使い方が違います。array_diffは特定の配列と同じ値を切り取ります。切り取られた部分は詰められません(2~3番目を切り取ったら、2~3番目は欠けたまま)。
記述方法は以下の様になります。
array_diff(配列名,比較対象配列名);
array_values(配列名);
サンプルコードで使い方を見てみます。
■PHPコード
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $test_array = ["one","two","three","four","five"]; $target_array = ["three","four"]; #対象配列の値を削除 $result_array = array_diff($test_array,$target_array); print_r($result_array); #配列の欠けた部分を詰める $result_array = array_values($result_array); print_r($result_array); ?> |
■実行結果
1 2 3 4 5 6 7 8 9 10 11 12 |
Array ( [0] => one [1] => two [4] => five ) Array ( [0] => one [1] => two [2] => five ) |
特定の値を削除する
unset&array_values
unset関数は配列の中の「指定した添え字」の値を削除します。削除された値は詰められません(2番目を削除したら、2番目は欠けたまま)。
記述方法は以下になります。
unset(配列名[添え字]);
array_values(配列名);
実際のコードを見てみます。
■PHPコード
1 2 3 4 5 6 7 8 9 10 |
<?php $test_array = ["one","two","three","four","five"]; unset($test_array[2]); print_r($test_array); #配列の欠けた部分を詰める $result_array = array_values($test_array); print_r($result_array); ?> |
■実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Array ( [0] => one [1] => two [3] => four [4] => five ) Array ( [0] => one [1] => two [2] => four [3] => five ) |
まとめ
今回はPHPでの配列の使い方についてご紹介しました。
今回紹介した内容は、
- PHPの配列の使い方の基本
- 配列の値の取り出し方
- 配列への値の追加
- 配列の値の検索
- 配列の結合
- 配列の値の削除
になります。
配列には様々な操作が必要になると思いますので、改めて参考にしてみて下さい。