PHPの勉強を始めたけど、配列の使い方がよくわからない・・・
配列はどのような用途で使えばいいの?変数との違いはなに?
配列を効率よく覚えたいけど何か良い方法はないかな?
PHPの勉強を始めたばかりの初学者が、最初につまづきやすいのが配列と言えます。配列の基本は理解できても、実際の業務では配列を駆使してさまざまな処理を行う必要があります。
こんにちは!侍エンジニア編集部です。
今回解説する配列の機能がどんな機能なのかわからない方でも丁寧に解説していくのでぜひ、この記事で学んでいってください。初心者必見の内容となりますので、ぜひ最後まで読んでいただいてPHPの配列について理解を深めていただければ幸いです。
この記事はこんな人のために書きました
- 配列の基礎の基礎を学びたい方
- 配列のさまざまな操作方法を知りたい方
- 配列でつまづいて困っている方
PHPの配列(Array)とは
配列(Array)とはどのようなものでしょうか?配列の説明に入る前に基本型(リテラル)についておさらいしておきましょう。
基本形(リテラル)では1つの変数を定義して、その変数に対して値を代入します。PHPでは変数を宣言すると同時に値を代入するのが基本です。
//変数$sportsに値’野球’を入れる $sports = '野球'
PHPの配列(Array)の場合は、わかりやすく言うとこの変数の値が複数格納できるものになります。
このように複数の値が格納できるため、大量のデータを扱いたいときに配列は非常に便利です。また、配列には連想配列、多次元配列があります。
連想配列はキーと値を別々に指定できる配列、多次元配列は配列の内部に配列を持つことができます。それぞれの使い方についてもこの記事内で詳しく解説していきます。
つまり配列とは
- 値を複数格納できる
- 配列には連想配列と多次元配列という種類もある
PHPの配列(Array)はどんなときに使うの?
PHPの配列は最初に説明したように複数のデータを一度に扱うことが可能なため、大量のデータを扱う必要がある場合に使用します。
例えば生徒のテストの点数を扱う変数を基本形(リテラル)で記述しようとした場合、以下のように大量に変数を定義しなければいけません。
$score1 = 値; $score2 = 値; $score3 = 値; $score4 = 値; …
しかし、配列を使用すれば1つの配列変数を定義すればOKです。
$array = [値1,値2,値3 …]
そのため、複数の同じ種類の値を扱いたい場合は配列を使用すると便利です。
PHPの配列(Array)の書き方とは
配列を作成する方法としてはarray()で作成するか、[](角括弧)で作成する方法があります。
※PHP5.4以降では配列の短縮構文が追加され、array()の代わりに[](角括弧)が使えるようになりました。この記事での配列は[](角括弧)の形式での解説となります。
配列の書き方
$配列変数名 = [ '値1', '値2', '値3' ];
値を格納することで、0から順番に0,1,2が添字(要素番号)で割り振られます。
なお、配列にはさまざまな使い方が可能で、基本を理解しただけでは実際の実務ではつまづきやすいと言えます。実務でよく使う応用的な使い方の理解もある程度必要なため、この記事で紹介している応用的な使い方についても目を通していただければ幸いです。
PHPの配列の書き方まとめ
- 配列は任意のオブジェクト型を要素として持つことができる
- 配列はarray()か[](角括弧)で作成できる
- 値を格納することで添字が0,1,2と割り振られる
PHPの配列の基本的な使い方
配列の初期化と代入
PHPの場合、配列の初期化と代入は基本的にまとめて実施します。
以下のサンプルプログラムを御覧ください。
$sports = [ 'Baseball', 'Badminton', 'Basketball' ];
このプログラムでは配列変数$sportsを定義したあとに[](角括弧)の中に’Baseball’、’Badminton’、’Basketball’の値を順番に代入しています。
代入する値は文字列の他に数値も格納可能です。また、文字列と数値が混在しても大丈夫です。
$sports = [ 'Baseball', 'Badminton', 100, 'Basketball', 200 ];
配列の出力
配列の中身を確認したい場合はprint_rなど文字列を出力する関数を使用すると便利です。以下のプログラムでは配列の値をprint_r関数で出力しています。
$sports = [ 'Baseball', 'Badminton', 'Basketball' ]; print_r($sports);
実行結果:
Array ( [0] => Baseball [1] => Badminton [2] => Basketball )
また、繰り返し文であるforeach文を使用して要素ごとに値を出力することもできます。
<?php $sports = [ 'Baseball', 'Badminton', 'Basketball' ]; foreach($sports as $value){ echo $value; } ?>
実行結果:
Baseball Badminton Basketball
foreachの使い方については以下の記事で詳しく解説していますので合わせて参考にしてください。
配列の要素を追加
配列に要素を追加する場合は[](角括弧)を指定して「$配列名[] = ‘値’」のように記述します。
<?php // 最終要素の後に追加(添字配列の場合) $sports = [ '野球', '野球バドミントン', 'バスケットボール' ]; $sports[] = 'バレーボール'; print_r($sports); ?>
実行結果:
Array ( [0] => 野球 [1] => 野球バドミントン [2] => バスケットボール [3] => バレーボール )
PHPの連想配列
連想配列とは
連想配列は値を格納して自動的に添字の番号(0,1,2…)が割り振られるのとは異なり、番号をキーとして名前をつけることができる配列です。添字番号にキーとして名前をつけることにより、そのKeyを指定して値を取り出すなどの管理がしやすくなるといったメリットがあります。
連想配列を作成するには角括弧[]の中で「キー名=>値」のように指定します。
連想配列の書き方:
$配列変数名 = [ キー名1=>値1, キー名2=>値2, キー名3=>値3' … ];
連想配列の使い方
キーと値を別々に指定できる連想配列の使い方について見ていきましょう。以下のプログラムを御覧ください。
$sports = [ 'Baseball'=>'野球', 'Badminton'=>'バドミントン', 'Basketball'=>'バスケットボール' ]; print_r($sports);
実行結果:
Array ( [Baseball] => 野球 [Badminton] => バドミントン [Basketball] => バスケットボール )
このようにキーに紐づく値が取得できていることがわかりますね!
以下のようにforeach文を使用して連想配列のキーと値を出力することも可能です。
<?php $fruits = [ 'apple'=>'100円', 'orange'=>'80円', 'banana'=>'120円', 'melon'=>'' ]; foreach($fruits as $key=>$val){ echo $key.'の値段は'.$val; echo '<br>'; } ?>
実行結果:
appleの値段は100円 orangeの値段は80円 bananaの値段は120円 melonの値段は
連想配列でforeach文を使用する場合はforeach文の条件式で「 $配列変数名 as $キー取得変数=>$値取得変数」のように定義します。
実際の業務でもforeach文でキーや値を取り出して、キーごとに条件を分岐させるなどの処理で使われますので、使い方についてはよく理解しておきましょう。
PHPの多次元配列
多次元配列とは
多次元配列とは、一言で言うと配列の中にさらに複数の配列が入っているものになります。
多次元配列は以下のように記述します。
$配列変数 = [ [値1, 値2, 値3…], [値1, 値2, 値3…], [値1, 値2, 値3…], … ];
$配列変数の中に複数の配列の情報が格納されていることがわかりますね。
多次元配列の使い方
多次元配列の実際のコードは以下のようになります。
<?php $array = [ ['田中',25,'男性'], ['鈴木',32,'女性'], ['高橋',20,'女性'] ]; print_r($array); ?>
実行結果:
Array ( [0] => Array ( [0] => 田中 [1] => 25 [2] => 男性 ) [1] => Array ( [0] => 鈴木 [1] => 32 [2] => 女性 ) [2] => Array ( [0] => 高橋 [1] => 20 [2] => 女性 ) )
実行結果からわかるように配列$arrayの各要素に1つの配列が格納されていることがわかりますね。繰り返し文で多次元配列の値を出力したい場合は以下のようになります。
<?php $array = [ ['田中',25,'男性'], ['鈴木',32,'女性'], ['高橋',20,'女性'] ]; foreach($array as $vals){ echo $vals[0].':'.$vals[1].'歳'.$vals[2]; echo '<br>'; } ?>
実行結果:
田中:25歳男性 鈴木:32歳女性 高橋:20歳女性
このプログラムではforeachを使って要素ごとに値を出力しました。$valsには$arrayの中の配列が格納されていますので$vals[0] $vals[1] $vals[2]のように要素番号を指定することにより、配列の値を取得できます。
PHPの配列の応用的な使い方
ここでは配列のさまざまな応用的な使い方について見ていきましょう。
配列の値を検索しよう
ここでは「array_search」「in_Array」「array_keys」を使用して配列の値を検索する方法について紹介します。
array_search関数は指定した値を検索し、最初のキーを返します。値が存在しなかったらFALSEを返します。
$sports = [ 'Baseball'=>'野球', 'Badminton'=>'バドミントン', 'Basketball'=>'バスケットボール' ]; $key = array_search('バスケットボール', $sports); print_r($key);
実行結果:
Basketball
in_array関数は配列の中に指定した値が存在する場合はTRUE。未存在はFALSEを返します。
$sports = [ 'Baseball'=>'野球', 'Badminton'=>'バドミントン', 'Basketball'=>'バスケットボール' ]; if (in_array('バスケットボール', $sports)){ echo 'バスケットボール存在します。'; } if (in_array('卓球', $sports)){ echo '卓球は存在します。'; }
実行結果:
バスケットボール存在します。
array_keys関数は配列のキーのすべて、あるいは一部を返します。重複した値があった場合でもキーを配列にして返します。
$sports = [ 'Baseball'=>'野球', 'Badminton'=>'バドミントン', 'Basketball'=>'バスケットボール', 'miniBasketball'=>'バスケットボール' ]; $keyArray = array_keys($sports); print_r($keyArray);
実行結果:
Array ( [0] => Baseball [1] => Badminton [2] => Basketball [3] => miniBasketball )
配列を結合してみよう
ここでは「Array_merge」「Array_merge_recursive」「Array_push」を使用して配列を結合する方法について紹介します。
array_merge関数は配列同士を結合するときに使用します。
- キーが文字列なら値が上書きされます。
- キーが数値なら値は上書きされず、添字番号が振り直されます。
- 添字配列の添字番号は「値が小さい順」ではなく「宣言された順」となります。
$array1 = ['color'=>'red', 10=>1, 0=>2]; $array2 = ['a', 'b', 'color'=>'', 3]; $array = array_merge($array1, $array2); print_r($array);
実行結果:
Array ( [color] => [0] => 1 [1] => 2 [2] => a [3] => b [4] => 3 )
array_merge_recursive関数は配列同士を結合するときに使用します。array_merge()関数と比べてキーが文字列なら値が上書きされません。
Arrayとして格納される点が異なります。
$array1 = ['color'=>'red', 10=>1, 0=>2]; $array2 = ['a', 'b', 'color'=>'', 3]; $array = array_merge_recursive($array1, $array2); print_r($array);
実行結果:
Array ( [color] => Array ( [0] => red [1] => ) [0] => 1 [1] => 2 [2] => a [3] => b [4] => 3 )
array_push関数は一つ以上の要素を配列の最後に追加します。
$array = ['apple', 'orange']; array_push($array, 'banana', 'melon'); print_r($array);
実行結果:
Array ( [0] => apple [1] => orange [2] => banana [3] => melon )
配列の値を置換しよう
ここでは「Array_replace」を使用して配列の値を置換する方法について紹介します。array_replace関数は置換対象の文字列が配列に存在した場合、置換する文字列に置き換えます。
$sports = [ 'Baseball'=>'野球', 'Badminton'=>'バドミントン', 'Basketball'=>'バスケットボール' ]; $newSport = [ 'Badminton'=>'バド', 'pickleball'=>'ピックルボール' ]; $sports = array_replace($sports, $newSport); print_r($sports);
実行結果:
Array ( [Baseball] => 野球 [Badminton] => バド [Basketball] => バスケットボール [pickleball] => ピックルボール )
配列の値を並び替えよう
sortメソッドを使用することで配列の並び替え(ソート)を行うことができます。配列に対してsortメソッドを使用すると昇順でソートを行います。
$numVal = [100,35,77,1,5]; sort($numVal); print_r($numVal);
実行結果:
Array ( [0] => 1 [1] => 5 [2] => 35 [3] => 77 [4] => 100 )
主に連想配列のソートとしては下記がよく使用されます。
メソッド | 説明 |
ksort | キーとデータの関係を維持しつつ、配列をキーで昇順ソートする。 |
krsort | キーとデータの関係を維持しつつ、配列をキーで降順ソートする。 |
asort | キーとデータの関係を維持しつつ、配列を値で昇順ソートする。 |
krsort | キーとデータの関係を維持しつつ、配列を値で降順ソートする。 |
配列の値を抽出しよう
array_filter関数は、コールバック関数を使用して、配列の要素をフィルタリングします。
// くだものの配列 $fruits = [ 'orange' => 100, 'banana' => 200, 'apple' => 150 ]; // フィルターの閾値をセット $filter_age = 150; /* * フィルターの条件(無名関数)をセット * 関数のリターン値が true 場合、フィルタリング後の結果セットに格納される */ $fruits_func = function ($value) use ($filter_age) { return ($value >= $filter_age); }; $result = array_filter($fruits, $fruits_func); print_r($result);
実行結果:
Array ( [0] => 1 [1] => 5 [2] => 35 [3] => 77 [4] => 100 )
PHPについてもっと学びたい方へ
ここでは、PHPの配列(Array)について基礎の基礎から解説してきました。プログラミングを身につけるためには、たくさんのトライ・アンド・エラーが必要です。しかし、PHPはできることがたくさんある分、非常に奥の深い言語です。
PHPの使い方についてもっとよく知りたい
PHPのスキルを身に着けられるか不安・・・
PHPを体系的に勉強したい
と感じている方は以下の記事も合わせてご覧ください。
PHPの概要から基本的な使い方まで網羅していますので、きっと参考になるのではと思います。
PHPを継続的に学習するコツ
PHPの学習をしていて、わからないところが多く何回も調べながらやるのは正直、嫌になってしまいますよね。そこで、どのようにすれば継続的に学習を続けて行けるのかそのコツをご紹介します。
目的を明確にする
まずは、なぜPHPを学んでいるのか明確にしましょう。例えば、PHPを学んで
- Webサイトが作りたい
- WordPressの編集がしたい
- エンジニアとして転職したい
- フリーランスを目指したい
など、目的は色々あると思います。
この目的を明確にすることがとても大事で、PHPを学ぶ学習意欲に繋がっていきます。目的がないまま学習をしていると、学習すること自体が目的になってしまい、ゴールのない果てしない道を進むことになります。その結果、挫折してしまう人が多いのが現状となっています。
そうならないためにも、PHPを学ぶ目的は言えるようにしましょう。もし言えない場合は、学ぶプログラミング言語自体間違っている可能性もあります。なので、しっかり目的から学んでいる言語があっているか確認しましょう。
学習プランを決める
目的が明確になったら、次に学習プランを立てましょう。この学習プランを立てずに学習している人が多いのですが、学習プランがないと自分が今どのくらい進んでいて、後どのくらい学習をすればいいのか見えないので、学習をすること自体がきつく長続きしません。
学習を継続的に続けるためには学習プランは必須とも言えます。いつまでに、どのレベルになっていて、最終的なゴールはいつ達成するのかはしっかり決めましょう。
先生を見つける
「何度もエラーになって、自分で調べては修正する」この繰り返しがPHPを学習していると起こります。調べてもよくわからないし、時間もかかってしまってプラン通りに学習が進まないというのは当然のように起こります。
このように思い、学習をすること自体に嫌気が指して挫折してしまう人も多いです。
そうならないためにも、「先生」を見つけることが大事になります。先生と言ってもそう簡単に探せそうにないですよね。最近ではSNSでもコミュニティーが増え、相談しやすい環境が増えてきています。こういったコミュニティーや勉強会を利用して先生を見つけるのも一つの手です。
自分に投資することも大事
学習サイトやアプリなど、無料で学習できる環境が整ってはいるものの自分に投資して学習をすることも大事です。本や有料学習サイトは、無料では学べない範囲の学習や機能が付いているので、効率的に学習をすることが可能です。
そして、投資のもう一つの方法がプログラミングスクールで学ぶことです。
独学と違い、プログラミングスクールでは上で紹介した学習を継続するためのサポートが徹底されているので、最も効率の良い学び方と言えるでしょう。先生も自分で探す必要がないので、エラーなどで躓いて時間がかかる心配もありません。
ですが、当然いきなりスクールに入るのは抵抗がありますよね。
その場合は、弊社で行っている無料カウンセリングへ参加してみてください。この無料カウンセリングでは、なぜPHPを学ぶのかその目的をヒアリングして、本当にPHPを学ぶべきなのか、その学習プランはどのように立てるのかなどの提案をしています。
目的をヒアリングすることで、あなたに最適な言語や学習プランが分かるので、最速でエンジニアを目指せるイメージがわきます。
手軽にしかもオンラインでも受けられるので、ぜひ一度目的を明確にしてみましょう。
まとめ
今回はPHPの配列(Array)について、配列の仕組みから基本的な使い方・応用的な使い方など網羅的に解説しました。配列は覚えてしまえばとても便利なものであることがわかったと思います。
しかし配列でできることは非常に多く、実際の業務では配列を駆使してさまざまな処理を行うことになりますので、使い方についてはしっかりとマスターしておきましょう。