今回はPHPの配列について紹介します。PHP配列の概念や使いかたが理解しづらく苦戦されている方もいらっしゃるのではないでしょうか?
配列はPHPでプログラミングする上でも重要な概念でありプログラムの幅を広げてくれます。本記事ではPHPの配列について基本から便利に配列を扱う方法まで解説しますので少しでも皆さまのお役に立てれば幸いです。
foreachを使った配列の繰り返し処理について知りたい方は下記の記事をご覧ください。
PHPの配列とは?
PHPの配列とは複数のデータをひとまとめにしたものです。
配列を使うことで大量にあるデータを1つにまとめて管理でき、同じ処理を一気に実行することができます。配列はPHPだけでなく他のプログラミング言語にも存在する概念です。そのため他言語でも応用でき効率的にコードが書けるようになるのでしっかりとマスターしましょう!
配列の基本的な書きかた
まずはPHPの配列の作成方法について覚えましょう。PHPではarray()
を使って配列を作成します。
//配列作成の基本文法
array(値1, 値2, ......);
//例
$animals = array('dog', 'cat', 'fox', 'elephant');
コード例では$animals
という変数に文字列「dog・cat・fox・elephant」という4つの値を配列として作成しています。
配列を作成する時はarray()
の()
内に配列に格納したい値を記述します。それぞれの値は,
(カンマ)で区切ることに注意しましょう。
配列の値はインデックスと呼ばれる番号が付与されます。最初の要素から順に0、1、2….の様に順番に番号が割り当てられるのです。例えば$animals
の値「dog」は「0」、「fox」は「2」となります。配列の値を指定する際にインデックスを使いますので覚えておきましょう!
また、配列は下記のように省略した記述もできます。
$animals = ['dog', 'cat', 'fox', 'elephant'];
array()
を省略して[]
内に値を記述するだけでも配列は作成できます。こちらも[]
内に値を記述していくだけです。記述量が少なくなるのでスッキリした見栄えになるかと思います。array()
と[]
はどちらを使っても問題ないですが、コードに統一感を持たせるため同じプログラム内では混在させないようにしましょう!本記事では配列には[]
を使って解説していきます。
多次元配列の書きかた
多次元配列とは配列の要素を配列としている配列のことです。配列が入れ子になっている訳です。下記のような配列を多次元配列と呼びます。
//多次元配列の例
$employees = [
['佐藤', 32, '商品開発部'],
['鈴木',27, '経理部']
];
ご覧いただいたように配列$employees
の要素として['佐藤', 32, '商品開発部']
と['鈴木',27, '経理部']
の2つの配列が要素として格納されています。このように多次元配列は配列の要素を配列とする形になります。
連想配列の書きかた
連想配列は配列の要素をキーと値のペアで格納します。通常の配列はインデックスを用いて値を参照しますが、連想配列の場合は任意のキーを用いて値を参照できます。
//連想配列の基本文法
[キー => 値];
//例
$animals = ['dog' => 'イヌ', 'cat' => 'ネコ', 'fox' => 'キツネ', 'elephant' => 'ゾウ'];
配列の要素を値だけでなく[キー => 値]
と記述することで連想配列を作成できます。値を取得する際もインデックスではなくキーで指定できるのでその点でも管理が楽になるかと思います。
配列を操作しよう!
配列はただ作るだけでなく使わないと意味がありません。今度は作った配列に対して要素の追加や削除をしてみましょう!
配列の値を取得する
まずは作った配列から値を取得してみましょう。
//基本文法
配列[インデックス];
//例
$animals = ['dog', 'cat', 'fox', 'elephant'];
print_r($animals[0]);
//結果:dog
配列[インデックス]
の形式で記述することで配列の値を取得できます。コード例の$animals[0]
は配列「animals」のインデックス「0」を取得するという意味になります。[]
内に任意のインデックスを指定することで配列から値を取得できます。
print_r(表示したい式や値)
と記述することで情報を出力できます。多次元配列などの複雑なデータでも直感的に理解しやすい形式で表示してくれるため、配列を一覧で確認したい時などに使ってみましょう!配列の要素の追加
配列に要素を追加してみましょう。要素の追加については先頭に追加する方法と配列の末尾に追加する2通りの方法を紹介します。
先頭に要素を追加する
配列の先頭に要素を追加するにはarray_unshift関数を使います。
//基本文法
array_unshift(配列, 先頭に追加したい要素);
//例
$animals = ['dog', 'cat', 'fox', 'elephant'];
array_unshift($animals, 'lion');
print_r($animals);
/*
Array
(
[0] => lion
[1] => dog
[2] => cat
[3] => fox
[4] => elephant
)
*/
array_unshift(配列, 先頭に追加したい要素)
と記述することで配列の先頭に要素を追加できます。
末尾に要素を追加する
配列の末尾に要素を追加するにはarray_push関数を使います。
//基本文法
array_push(配列, 末尾に追加したい要素);
//例
$animals = ['dog', 'cat', 'fox', 'elephant'];
array_push($animals, 'lion');
print_r($animals);
/*
Array
(
[0] => dog
[1] => cat
[2] => fox
[3] => elephant
[4] => lion
)
*/
array_push(配列, 末尾に追加したい要素)
と記述することで配列の末尾に要素を追加できます。
配列の要素の削除
次は配列の要素の削除について学びましょう。削除についてもunset関数、array_splice関数を使った2通りの方法について解説します。
unset()
まずは下記のコード例をご覧ください。
//基本文法
unset(削除したい要素);
//例
$animals = ['dog', 'cat', 'fox', 'elephant'];
unset($animals[1]);
print_r($animals);
/*
Array
(
[0] => dog
[2] => fox
[3] => elephant
)
*/
unset関数を使って要素を削除したい時はunset(削除したい要素)
と記述します。上記のコード例ではインデックス「1」の「cat」を配列から削除しています。この時削除後の配列からインデックス「1」がなくなり「0,2,3」とインデックスが連番でなくなっていることにも注目してください。
array_splice()
次はarray_splice関数を使って要素を削除します。先程のunset関数との違いが分かりますでしょうか?
//基本文法
array_splice(配列, 削除開始位置, 削除する配列の要素数);
//例
$animals = ['dog', 'cat', 'fox', 'elephant'];
array_splice($animals, 1 ,1);
print_r($animals);
/*
Array
(
[0] => dog
[1] => fox
[2] => elephant
)
*/
array_splice関数を使って要素を削除するにはarray_splice(配列, 削除開始位置, 削除する配列の要素数)
と記述します。上記に記載しているarray_splice($animals, 1 ,1);
部分は「配列$animalsのインデックス1を開始位置にして1個要素を削除する」という意味になります。
array_splice関数を使う時は基本的に「削除を開始する位置」と「削除する要素の数」を指定しましょう。ちなみに「削除する要素の数」を指定しなかった場合は削除の開始位置から末尾までの全ての要素が削除されます。
unset関数との最大の違いはarray_splice関数は削除後に配列の要素を自動的に詰めます。そのためコード例でも削除後のインデックスは「0,1,2」となっており、インデックスは連番を保っています。
要素を削除した後の配列の中身が大きく変わるのでこの点を意識してunset関数とarray_splice関数を使い分けましょう!
PHPの配列をもっと便利に扱う
配列の要素の数を取得する
「配列の要素の数が知りたい!」そんな時はcount関数をつかいます。
//基本文法
count(要素数が知りたい配列);
//例
$animals = ['dog', 'cat', 'fox', 'elephant'];
print_r(count($animals));
//結果: 4
count(要素数が知りたい配列)
で配列の要素数が分かります。count関数は値を数値で返します。
array_merge()で配列を結合する
配列を結合する時はarray_merge関数を使いましょう。
//基本文法
array_merge(配列1, 配列2);
//例
$num1 = [1, 2];
$num2 = [3, 4];
$num3 = array_merge($num1, $num2);
print_r($num3);
/*
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
*/
array_merge(配列1, 配列2)
と記述すれば異なる配列同士を結合できます。上記のコードでは$num1と$num2を結合した配列を$num3としています。結果を見ると結合後の配列は1つの配列となっていることが分かりますね。
array_chunk()で配列を分割する
次に配列を分割する方法を見ていきましょう。PHPではarray_chunk関数を使うことで1つの配列を複数の配列に分割できます。
//基本文法
array_chunk(配列, 分割サイズ[, bool キーの維持]);
//例
$fruits = ['apple', 'banana', 'grape', 'melon', 'lemon'];
print_r(array_chunk($fruits, 2));
/*
Array
(
[0] => Array
(
[0] => apple
[1] => banana
)
[1] => Array
(
[0] => grape
[1] => melon
)
[2] => Array
(
[0] => lemon
)
)
*/
print_r(array_chunk($fruits, 2, true));
/*
Array
(
[0] => Array
(
[0] => apple
[1] => banana
)
[1] => Array
(
[2] => grape
[3] => melon
)
[2] => Array
(
[4] => lemon
)
)
*/
配列を分割するにはarray_chunk(配列, 分割サイズ[, bool キーの維持])
と記述します。
3つ目の引数「キーの維持」は記述しなくても構いません。デフォルトではfalseとなっていますが、trueを指定すると分割前の配列のインデックスがそのまま引き継がれます。
「分割サイズ」は分割後の配列の要素の個数を指定できますが、サイズによっては余りが出るので最後の配列は指定したサイズでない場合があります。
array_filter()で配列の要素をフィルタリングする
//基本文法
array_filter(配列, コールバック関数[, フラグ]);
//例
$num = [3, 8, 23, 59, 72, 86, 99];
function large_number($num) {
return $num > 50;
}
print_r(array_filter($num, 'large_number'));
/*
Array
(
[3] => 59
[4] => 72
[5] => 86
[6] => 99
)
*/
配列をフィルタリングしたいときはarray_filter(配列, コールバック関数[, フラグ])
と記述します。
コールバック関数は任意の関数を指定でき、上記のコードでは値が50より大きい要素をフィルタリングするようにしています。
3つ目の引数であるフラグはコールバック関数にどのような値を渡すかを指定でき、下記の2つを指定できます。
- ARRAY_FILTER_USE_KEY : 配列のキーのみコールバック関数に渡す
- ARRAY_FILTER_USE_BOTH : 配列のキーと値をコールバック関数に渡す
例えばフラグを配列のキーのみをコールバック関数に渡す「ARRAY_FILTER_USE_KEY」を指定した場合下記の様になります。
$num = [3, 8, 23, 59, 72, 86, 99];
function large_number($num) {
return $num > 50;
}
print_r(array_filter($num, 'large_number', ARRAY_FILTER_USE_KEY));
/*
Array
(
)
*/
フィルタリングした結果条件にマッチする要素はありませんでした。これは「ARRAY_FILTER_USE_KEY」を指定したことでキー(インデックス)が50より大きい要素をフィルタリングしていることになります。上記コードのインデックスは0から6までしかないので当然条件に一致する要素がないということになります。
PHPの配列は頻出する
PHPに限った話ではありませんが、他言語含め配列という概念はコードを書く上で無視できません。配列についてしっかりマスターすることでプログラムの幅がグッと広がります。特に大量のデータを管理するような場面では配列は重要な役割を担ってくれるでしょう。
プログラミング初学者の方にはとっつきにくい概念かもしれませんが実際のプログラミングでは配列を使って様々な処理をすることになります。繰り返し使うことで身につくようになるので恐れずに積極的に使ってみましょう!