[PHP] 配列に関する関数メモ [4] – 配列を統合したり分解する

前回([PHP] 配列に関する関数メモ [3] – 配列の順番を並び替える )に引き続き、今回は配列を統合したり分解するような関数についてまとめました。

配列を統合して文字列にしたり、配列同士を統合する

配列を分解する

配列を統合して文字列にしたり、配列同士を統合する

配列を文字列で繋いで1つの文字列にする – implode()

implode() 関数を使用すると配列の要素を文字列で連結して、新たな1つの文字列にすることができます。

配列 $array の値を文字列「◎」で連結して1つの文字列にする。

$array = array( 'いぬ', 'ねこ', 'すずめ', 'かわうそ' );
$value = implode( $array, '◎' );

//↓結果

$value → 
string(42) 
"いぬ◎ねこ◎すずめ◎かわうそ"
implode(配列, ‘配列の要素をつなぐ文字列’)
PHP: implode – Manual

文字列を特定の文字列で区切り配列にする – explode()

explode() 関数を使用すると前項の implode() 関数とは逆に、1つの文字列を指定した文字列で区切り配列に格納することができます。

文字列 $value の値を文字列「◎」で区切った配列にする。

$value = 'いぬ◎ねこ◎すずめ◎かわうそ';
$array = explode('◎', $value);

//↓結果

$array → 
array(4) { 
	[0]=> string(6) "いぬ" 
	[1]=> string(6) "ねこ" 
	[2]=> string(9) "すずめ" 
	[3]=> string(12) "かわうそ" 
} 
explode(‘文字列を区切る文字列’, 配列)
PHP: explode – Manual

配列を統合する(重複キーが存在する場合は上書き) – array_merge()

array_merge() 関数を使用すると1つ以上の配列同士を統合して1つの配列にまとめ直すことができます。
第二引数より後に指定した配列が、第一引数で指定した配列の後ろに追加されます。
数字キーは新しい配列の順番で振り直されます。連想配列で同じキーが存在した場合は、後から追加される値で上書きされます。

配列 $array_1 と $array_2 を1つの配列 $array にする。

$array_1 = array( 'a', 'b', 'c', 'd' );
$array_2 = array( 'e', 'f', 'g', 'h' );
$array = array_merge($array_1, $array_2);

//↓結果

$array → 
array(8) { 
	[0]=> string(1) "a" 
	[1]=> string(1) "b" 
	[2]=> string(1) "c" 
	[3]=> string(1) "d" 
	[4]=> string(1) "e" 
	[5]=> string(1) "f" 
	[6]=> string(1) "g" 
	[7]=> string(1) "h" 
} 
array_merge(配列, 追加する配列)
PHP: array_merge – Manual

配列を統合する(重複キーが存在する場合は最初のものが優先) – 配列結合演算子+

array_merge() 関数と同じく配列を統合することができます。
数字キー、連想配列のキーともに同じキーが存在する場合は最初の配列のものが残り、後の配列の値は無視されます。

配列 $array_1 と $array_2 を1つの配列 $array に統合する。

$array_1 = array( 'a', 'b', 'c', 'd' );
$array_2 = array( 'e', 'f', 'g', 'h' );
$array = $array_1 + $array_2;

//↓結果 数字キーがすべて重複するため2番目の配列の値は無視

$array → 
array(4) { 
	[0]=> string(1) "a" 
	[1]=> string(1) "b" 
	[2]=> string(1) "c" 
	[3]=> string(1) "d" 
} 
統合した配列 = 配列 + 配列
PHP: array_merge – Manual

配列を分解する

配列を分解して変数に代入する – list()

list() を使用すると配列を分解し、配列の順番で変数に代入することができます。
※バージョン7 からは文字列の変数が扱えなくなる(?)ようです。(PHP: 下位互換性のない変更点 – Manual

配列 $array を変数に分解する。

$array = array('いぬ', 'ねこ', 'すずめ', 'かわうそ');
list($a, $b, $c, $d) = $array;

//↓結果

$a → 
string(6) "いぬ" 
$b → 
string(6) "ねこ" 
$c → 
string(9) "すずめ" 
$d → 
string(12) "かわうそ" 
list(変数, 変数) = 分解したい配列
PHP: list – Manual

連想配列のキーから自動的に変数を作る – extract()

extract() 関数を使用すると、連想配列のキーから自動的に新たに変数を作成し値を代入します。第二引数に何も指定しないと、同じキーが存在した場合に後から処理する値に上書きされてしまいます。第二引数には以下のような値を指定でき、重複した場合の動作を制御できます。(その他の値はマニュアルを参照下さい)

EXTR_SKIP 重複した場合に先に存在する変数は上書きされない。そのキーと値は無視される。
EXTR_PREFIX_SAME 重複があった場合は第三引数で指定した文字列を接頭詞として付けて変数を作る。
EXTR_PREFIX_ALL 新たに作るすべての変数に第三引数で指定した接頭詞をつける。
EXTR_PREFIX_INVALID 無効または数値の変数名に第三引数で指定した接頭詞をつける。
ユーザーから入力した値に使う場合には、値を上書きしないようにしてセキュリティに気をつける必要がありそうです。
参考:PHP の extract 関数は危険という話 – まちゅダイアリー(2008-09-06)

連想配列 $array のキーを変数名にして自動的に変数をつくる。

$array = array( 'a' => 'いぬ', 'b' => 'ねこ', 'c' => 'すずめ', 'd' => 'かわうそ');
extract($array);

//↓結果 キーが新たに変数として作られ、そこへ値が入る

$a → 
string(6) "いぬ" 
$b → 
string(6) "ねこ" 
$c → 
string(9) "すずめ" 
$d → 
string(12) "かわうそ" 

連想配列 $array のキーを変数名にして自動的に変数をつくり、重複する変数名には接頭詞「ex」をつける。

$value = 'しばいぬ';
$array = array( 'value' => 'いぬ', 'b' => 'ねこ',  'c' => 'かわうそ', 'd' => 'すずめ');
extract($array, EXTR_PREFIX_SAME, "ex");

EXTR_PREFIX_SAME を第二引数に設定する

//↓結果 

$value →
string(6) "しばいぬ" 
$ex_value → 
string(6) "いぬ" 
$b → 
string(6) "ねこ" 
$c → 
string(9) "すずめ" 
$d → 
string(12) "かわうそ" 
extract(配列, 変数が重複する際の動作の値)
PHP: extract – Manual

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です