PHP

【PHP】配列・連想配列・多次元配列の分割代入をする方法

本記事では、PHPの配列・連想配列・多次元配列の分割代入をする方法について解説しています。

PHPの学習におすすめ参考書
気づけばプロ並みPHP 改訂版–ゼロから作れる人になる!

本書情報
出版社リックテレコム
著者谷藤 賢一
発売日2017/3/6
ページ数331ページ
レビュー
(Amazon)
(168件)
先輩くん
先輩くん
Amazon Kindle Unlimitedに登録すると、月額980円で読み放題だからオススメだよ!
後輩ちゃん
後輩ちゃん
初回30日間は無料だから、まだ登録したことのない人はぜひ試してみてね!

綺麗なコードが書けるようになる!
リーダブルコード-より良いコードを書くためのシンプルで実践的なテクニック

本書情報
出版社オライリージャパン
著者Dustin Boswell / Trevor Foucher
発売日2012/6/23
ページ数260ページ
レビュー
(Amazon)
(620件)
先輩くん
先輩くん
より良いコードを書きたい人におすすめの本だよ!
後輩ちゃん
後輩ちゃん
10以上前の書籍ですが、内容は今でも役に立つものばかりです!

配列の分割代入

配列の分割代入をする基本的な書き方は以下のとおりです。

[$variable, $variable] = array;
構文解説
  • $variable:変数名をセット(変数名と変数名は「,」で区切る)
  • array:分割代入させたい配列

実際に配列の分割代入をするサンプルコードを用意したので、動作確認してみましょう。

<?php
$arr = ['a', 'b', 'c'];
[$str1, $str2, $str3] = $arr;

print_r($str1); // a
print_r($str2); // b
print_r($str3); // c

配列内にある3つの値が、それぞれ各変数に代入されていることが確認できます。もし、分割代入の変数($variable)を多く設定してしまった場合と少なく設定してしまった場合どのようになるか確認してみましょう。

[$str1, $str2, $str3, $str4] = $arr;

print_r($str4); // Warning: Undefined array key 3

多く設定した場合は、インデックス番号(添え字)の3番目のキーは存在しないとエラーが返されてしまいます。

[$str1, $str2] = $arr;

print_r($str1); // a
print_r($str2); // b

少なく設定した場合は、特にエラーは返されません。その代わり、変数に代入されなかった今回だと「”c”」はどこにも代入されません。

多次元配列の分割代入

先ほど学んだ方法で多次元配列も分割代入してみましょう。

<?php
$str = ['a', 'b', ['c', 'd'], ['e', 'f']];
[$str1, $str2, $str3, $str4] = $str;

print_r($str1); // a
print_r($str2); // b
print_r($str3); // Array ( [0] => c  => d )
print_r($str4); // Array ( [0] => e  => f )

変数$str1,$str2は正しく値が取得出来ていますが、変数$str3,$str4には配列そのものが代入されていることが確認できます。

これを正しく分割代入させるには、多次元配列の値が代入される変数を[]で囲ってあげます。

<?php
$str = ['a', 'b', ['c', 'd'], ['e', 'f']];
[$str1, $str2, [$str3, $str4]] = $str;

print_r($str1); // a
print_r($str2); // b
print_r($str3); // c
print_r($str4); // d

連想配列の分割代入

連想配列の分割代入をする基本的な書き方は以下のとおりです。

['key' => $variable, 'key' => $variable] = array;
構文解説
  • key:連想配列のキーを指定
  • $variable:変数名をセット(変数名と変数名は「,」で区切る)
  • array:分割代入させたい連想配列

実際に連想配列の分割代入をするサンプルコードを用意したので、動作確認してみましょう。

<?php
$person = ['name' => 'Taro', 'age' => 20];
['name' => $name1, 'age' => $age1] = $person;

print_r($name1); // Taro
print_r($age1); // 20

連想配列内にある2つの値が、それぞれ各変数に代入されていることが確認できます。もし、分割代入のキー(key)の値が存在しなかった場合どのようになるか確認してみましょう。

['gender' => $gender1] = $person;

print_r($gender1); // Warning: Undefined array key "gender"

存在しないキーを指定した場合は、そんなキーはないよとエラーが返されてしまいます。

ブログランキング・にほんブログ村へ PVアクセスランキング にほんブログ村