非エンジニアでも知らないとヤバイPHP Part7〜配列について理解しよう〜

前回はPHPのプログラムのデータ型について大まかに説明いたしました。今回はデータ型の中の「配列」に特化して説明いたします。

配列型とは

配列型とは複数の値をまとめて格納できる型となります。配列は英語で「array」という単語になります。PHPの配列を使う場合、このarrayという文字が頻繁に出てきます。

配列の作成方法

PHPの場合、配列の作成方法は大きく以下の3つがあります。

  1. array()を用いる
  2. 短縮構文[]を用いる
  3. $変数名[] = ‘値’;を用いる

それぞれ説明していきます。

array()

配列の最も基本的な書き方となります。PHPに組み込まれているarray()を使います。array()の括弧の中に値を格納していきます。複数の値を格納する場合「,(カンマ)」を用いて値を区切ります。作成した配列は、代入演算子を用いて変数や定数に代入していきます。

$values = array(
'値1',
'値2',
'値3',
);

print_r($values); //print_r()で配列の値の呼び出し
// Array(
// [0] => 値1
// [1] => 値2
// [2] => 値3
// )

作成した配列は、中の要素(上記の値1、値2、値3)を取り出すことも可能です。特に指定した名称(キー)をつけない場合、配列の要素(中身)に関しては0からカウントします。取り出し方法の詳細に関しては「配列のキー」で説明いたします。例えば「値2」を取り出したい場合、以下の様に記述します。

print_r($values[1]); // 値2

短縮構文[]

次に短縮構文の[]について説明します。と言っても、こちらは先に紹介したarray()を[]で書き換えた形になります。具体的な書き方は下記の通りです。

$values = ['値1' , '値2' , '値3' ,];
print_r($values);
// Array(
// [0] => 値1
// [1] => 値2
// [2] => 値3
// )
print_r($values[2]); // 値3

$変数名[] = ‘値’; を用いる

最後に$変数名[]について説明いたします。こちらは変数名の後ろに[]をつけることで、変数に対し後ろから値を格納していくことができます。

$fruits[] = 'apple';
$fruits[] = 'banana';
$fruits[] = 'orange';
print_r($fruits);
// Array(
// [0] => apple
// [1] => banana
// [2] => orange
// )
print_r($fruits[0]); // apple

配列のキー(key)

配列のキーは、配列の添字(インデックス)や連想配列のキー(後述)を指します。キーには整数と文字列を使用することができます。配列にキーを指定した場合は、そのキーを用いることでキーに対応する要素を選択することができます。書き方としては、$変数名[キー(要素番号・要素名)]と言った書き方となります。
今回はキーに[‘name’] [‘gender’] [‘age’] [‘address’]を設定してみます。

$member['name'] = '太郎';
$member['gender'] = '男性';
$member['age'] = '20';
$member['address'] = '東京都';
print_r($member);
// Array(
// [name] => 太郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// )

配列の中の特定の値を取り出したい場合、配列名(変数)の後ろに[](角括弧・ブラケット)をつけ、その中身にキーを入力します。例えば今回、太郎さんのage(年齢)である「20」を取り出したかった場合、$member[‘age’]とすることで、「20」にアクセスできます。

print_r($member['name']); // 太郎
print_r($member['gender']); // 男性
print_r($member['age']); // 20
print_r($member['address']); // 東京都

キーは省略することも可能です。省略した場合、整数のキーが自動で付与されます。付与されるキーは、既にキーが存在する場合は、キーに付与されている数字の次の数字があてがわれます。キーが存在しない場合、[0]からキーが付与されます。
ちなみにこのキーは、既に使用されているキーを再度使用すると、既に使用されているキーの値が変更されてしまうため、注意が必要です。逆に意図的に変更したい場合(例えばユーザーから入力された情報をもとにデータを上書きする場合など)は、配列のキーを指定して値を代入していく手段が使われます。

$member['name'] = '太郎';
$member['gender'] = '男性';
$member['age'] = '20';
$member['address'] = '東京都';
$member['name'] = '次郎'; //←キー['name']に'次郎'を代入(太郎を上書き)
$member[] = '大学生';
$member[] = '経済学部';
$member[1] = '商学部'; //←キー[1]に'商学部'を代入(経済学部を上書き)
print_r($member);
// Array(
// [name] => 次郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// [0] => 大学生
// [1] => 商学部
// )

配列の初期化

配列の初期化方法ですが、方法としては下記の2つがあります。

  1. $変数名 = array();
  2. $変数名 = [];

変数名に空の配列を代入しています。

$Array1 = array(); //1.の空配列を作成
$Array2 = []; //2.の空配列を作成
print_r($Array1);
// Array( ) //1.の出力結果
print_r($Array2);
// Array( ) //2.の出力結果

連想配列とは

連想配列はキーで配列の要素を指定できる配列のことを連想配列と呼びます。「 キー => 値 」という記法を用いて必要な数を ,(カンマ)で区切り、引数として渡します。先程の太郎さんの例を使うと以下のような書き方になります。

①array()を用いた場合
$taro = array(
'name' => '太郎',
'gender' => '男性',
'age' => 20,
'address' => '東京都',
);
print_r($taro);
// Array(
// [name] => 太郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// )

echo $taro[name]; //太郎

②短縮構文[]を用いた場合
$taro = [
'name' => '太郎' ,
'gender' => '男' ,
'age' => 20 ,
'address' => '東京都' ,
];
print_r($taro);
// Array(
// [name] => 太郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// );

echo $taro['gender']; //男性

③$変数名[‘キー‘] = ‘値’;を用いた場合
$taro['name'] = '太郎';
$taro['gender'] = '男性';
$taro['age'] = 20;
$taro['address'] = '東京都';
print_r($taro);
// Array(
// [name] => 太郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// )

echo $taro['address']; //東京都

多次元配列とは

多次元配列は配列の中に、さらに配列が入っている状態の配列のことを多次元配列と呼びます。複数の情報を、複数にまたがって保有したい場合などに用います。実際の使い方を、短縮型とarray()型(及びキー)を例に説明いたします。

$members = [
['花子' , "女性" , 22 ],
['太郎' , "男性" , 20 ],
['幸子' , "女性" , 24],
];
echo $members[0][0] . 'さんは' . $members[0][1] . 'で' . $members[0][2] . '歳です。';

// 花子さんは女性で22歳です。
echo $members[1][0] . 'さんは' . $members[1][1] . 'で' . $members[1][2] . '歳です。';
// 太郎さんは男性で28歳です。
echo $members[2][0] . 'さんは' . $members[2][1] . 'で' . $members[2][2] . '歳です。';
// 幸子さん女性で24歳です。

$members2 = array(
array(
'name' => 'ポチ',
'gender' => 'オス',
'age' => '5',

),
array(
'name' => 'タマ',
'gender' => 'メス',
'age' => '3',
),
);
echo $members2[0]['name'] . 'は' . $members2[0]['gender'] . 'で' . $members2[0]['age'] . '歳です。';

//ポチはオスで5歳です。
echo $members2[1]['name'] . 'は' . $members2[1]['gender'] . 'で' . $members2[1]['age'] . '歳です。';

//タマはメスで3歳です。

配列の操作

配列の操作に関してもいくつか方法があります。具体的には下記の通りです。

  1. 配列の要素の追加
  2. 配列の要素の削除
  3. 配列の要素の変更
  4. 配列同士の結合

配列の要素の追加

配列に要素を追加する場合、大きく5つの方法があります。

  1. array_push()の使用
  2. []の使用
  3. array_merge() の使用
  4. array_unshift()の使用
  5. +演算子の使用

array_push()の使用

array_push関数は1つ以上の要素を、配列の最後に追加する関数です。arrya_push関数は、関数に使用した元の配列を変更します(元の配列に追加されます)。1つだけ要素を追加することも可能ですが、1つだけ追加する場合は次に説明する[]を使用した方が関数を呼び出す負荷(オーバーヘッド)が減ります。

$fruits = ['りんご' , 'バナナ' , 'みかん' ,];
array_push($fruits , 'ぶどう' , 'もも');
print_r($fruits);
// Array(
// [0] => りんご
// [1] => バナナ
// [2] => みかん
// [3] => ぶどう
// [4] => もも
// )
//元配列の$fruitsに’ぶどう’と’もも’が追加された
$sports = ['野球' , 'サッカー' , 'バレーボール' ,];
array_push($sports , ['陸上' , '水泳' ,] , ['フィギュアスケート' , 'スピードスケート' ,]);
print_r($sports);
// Array(
// [0] => 野球
// [1] => サッカー
// [2] => バレーボール
// [3] => Array(
// [0] => 陸上
// [1] => 水泳
// )
// [4] => Array(
// [0] => フィギュアスケート
// [1] => スピードスケート
// )
// )
//元配列の$sportsの[3]と[4]に[‘陸上’ , ‘水泳’]と[‘フィギュアスケート’ , ‘スピードスケート’]が追加されました。

[]の使用

[]の使用は、$変数名[] = ‘値’;のところで説明した内容と重複します。変数に対し、後ろから値を格納していきます。

array_merge()の使用

array_merge関数は、merge元の配列と結合する配列を指定することで、配列同士を結合します。array_merge関数は、元の配列を変更しません。

$fruits1 = [‘りんご’ , ‘ばなな’ , ‘みかん’];
$fruits2 = array_merge($fruits1 , [‘ぶどう’ , ‘もも’]);
$print_r($fruits1);
$print_r($fruits2);
// Array (
// [0] => りんご
// [1] => ばなな
// [2] => みかん
// ) 元の配列は変更しない
// Array (
// [0] => りんご
// [1] => ばなな
// [2] => みかん
// [3] => ぶどう
// [4] => もも
// ) //’ぶどう’と’もも’が追加された

array_unshift()の使用

array_unshift関数は、1つ以上の要素を配列の先頭に加えます。array_unshift関数は、関数に使用した元の配列を変更します(元の配列に追加されます)。

$fruits1 = [‘りんご’,’ばなな’,’みかん’];
array_unshift($fruits1 , ‘ぶどう’ , ‘もも’);
print_r($fruits1);
// Array (
// [0] => ぶどう
// [1] => もも
// [2] => りんご
// [3] => ばなな
// [4] => みかん
// ) //元の配列$fruits1の先頭に’ぶどう’と’もも’が追加された

+演算子の使用

+演算子に関しては、連想配列で使用可能です。キーと値を指定している場合、+演算子を用いて配列に値を追加していくことが可能です。+演算子では、元の配列を変更しません。

$array1 = [‘りんご’,’ばなな’,’みかん’];
$array2 = $array1 + [3 => ‘ぶどう’];
$array3 = $array1 + [‘もも’];
print_r($array1);
print_r($array2);
print_r($array3);
// Array (
// [0] => りんご
// [1] => ばなな
// [2] => みかん
// ) //元の配列は変更されない
// Array (
// [0] => りんご
// [1] => ばなな
// [2] => みかん
// [3] => ぶどう
// ) //ぶどうが追加された
// Array (
// [0] => りんご
// [1] => ばなな
// [2] => みかん
// ) //キーを指定していない’もも’は追加されない

配列の要素の削除

配列から要素を削除する方法は、大きく4つの方法があります。

  1. unset()の使用
  2. array_splice()の使用
  3. array_shift()の使用
  4. array_pop()の使用

unset()の使用

unset関数は、配列の要素を削除します。キーを指定しない場合、要素の全てを削除します。また、要素のキーを指定して削除した場合、そのキーは歯抜けの状態となります。unset()関数は元の配列を変更します。

$array1 = ['りんご','ばなな','みかん'];
unset($array1);
print_r($array1);
// NULL
$array1 = ['りんご','ばなな','みかん'];
unset($array1[1]);
print_r($array1);
// Array (
// [0] => りんご
// [2] => みかん
// )
//[1] => ばなな が削除され、歯抜けの状態になった([2] => みかん は [1] => みかん に変更されない)

余談ですが、arrayを連番にしたい場合、array_values関数を用います。

$array1 = ['りんご','ばなな','みかん'];
unset($array1[1]);
$array1 = array_values($array1);
print_r($array1);
// Array (
// [0] => りんご
// [1] => みかん
// )

array_splice()の使用

array_splice関数は、指定した位置から配列の要素を削除します。array_splice関数は、元の配列を書き換えます。オプションを追加することで、削除する配列の要素数・削除した後に置換する要素を指定することもできます。書き方としては下記の通りとなります。
array_splice( 配列 , 配列の要素の削除開始位置 , [ , 削除する配列の要素数 [ , 置き換える要素 ] ]);

$array1 = ['りんご','ばなな','みかん'];
array_splice($array1 , 1);
print_r($array1);
// Array ( [0] => りんご )
// ‘ばなな’と’みかん’が元の配列から削除された

$array1 = ['りんご','ばなな','みかん'];
array_splice($array1 , 1 , 1);
// Array (
// [0] => りんご
// [1] => みかん
// )
//配列の1番目(削除開始位置)から1つの要素(ばなな)を削除

$array1 = ['りんご','ばなな','みかん'];
array_splice($array1 , 1 , 1 , ['ぶどう' , 'もも']);
print_r($array1);
// Array (
// [0] => りんご
// [1] => ぶどう
// [2] => もも
// [3] => みかん
// )
//配列の1番目(削除開始位置)から1つの要素(ばなな)を削除し、削除した箇所を’ぶどう’と’もも’で置換しました。

array_shift()の使用

array_shift関数は、配列の先頭の要素を削除する関数です。array_shift関数は、元の配列を変更します。array_shift(配列);で使うことができます。

$array1 = ['りんご','ばなな','みかん'];
array_shift($array1);
print_r($array1);
//Array (

// [0] => ばなな
// [1] => みかん )
// 配列の先頭の’りんご’が元の配列から削除された

array_pop()の使用

array_pop関数は、配列の最後尾の要素を削除する関数です。
array_pop関数は、元の配列を変更します。array_pop(配列);で使うとこが可能です。

$array1 = ['りんご','ばなな','みかん'];
array_pop($array1);
print_r($array1);
// Array (
// [0] => りんご
// [1] => ばなな
// )
//配列の最後尾の’みかん’が配列から削除された

配列の要素の変更

配列の要素を変更する方法は、大きく2つ方法があります。

  1. 要素のキーを指定して再代入する
  2. allay_replace()の使用

要素のキーを指定して再代入する

今までの説明でも出てきましたが、連想配列を用いて既出の要素のキーを指定して変数を格納することで、配列の要素を変更できます。

$member['name'] = '太郎';
$member['gender'] = '男性';
$member['age'] = 20;
$member['address'] = '東京都';
print_r($member);
// Array (
// [name] => 太郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// )
$member['age'] = 30;
//ageに30を再代入
$member['address'] = '新宿区';
//addressに’新宿区’を再代入
print_r($member);
// Array (
// [name] => 太郎
// [gender] => 男性
// [age] => 30
// [address] => 新宿区
// )
//ageとaddressが変更された

array_replace()の使用

array_replace関数は、渡された配列の要素を置き換えます。array_replace関数は元の配列を書き換えません。書き方は以下の通りとなります。
array_replace(配列 , 置き換えたい要素を含む配列);

$member1 = [
'name' => '太郎',
'gender' => '男性',
'age' => 20,
'address' => '東京都',
];
$replace1 = [
'address' => '千葉県',
'age' => 25,
];
$replace2 = [
'name' => '次郎',
'address' => '神奈川県',
];
$member2 = array_replace($member1 , $replace1, $replace2);
print_r($member1);
print_r($member2);

// Array ( [name] => 太郎 [gender] => 男性 [age] => 20 [address] => 東京都 )
// Array ( [name] => 次郎 [gender] => 男性 [age] => 25 [address] => 神奈川県 )

配列同士の結合

  1. array_merge()の使用
  2. array_push()の使用
  3. +演算子の使用

いずれも配列の要素の追加で説明した内容と同じです。

まとめ

いかがでしたでしょうか。今回はPHPの配列について紹介いたしました。具体的には以下の7つをご紹介いたしました。

  1. PHPの配列型とは
  2. 配列の作成方法
  3. 配列のキー
  4. 配列の初期化
  5. 連想配列
  6. 多次元配列
  7. 配列の操作(追加・削除・変更・結合)

今回の内容はかなり多数に渡りました。正直1回で理解することは難しいかもしれません。ただ、配列を理解するとプログラミングで実行できる範囲がかなり広がります。今回ご覧いただいた内容は、ぜひ理解して今後のプログラミングに活用してください。

最後に

プログラミングを独学で行うと挫折することがしばしばあります。プログラミングを学んでみたい方、短期間でプログラミングを身につけたい方は64時間で”なりたい”を叶えるプログラミングスクール「WISH」にお気軽にお問い合わせください。現在無料カウンセリングや、入会金無料キャンペーン、さらに受講料20%オフのキャンペーンを開催しております。

関連記事