PHPプログラミング

レシピ

配列

配列の指定した場所に値を追加する

array_splice関数を使って、配列の任意の場所に要素を追加する方法について解説します。

この記事のポイント

  • 配列の好きな場所に要素を追加することができる
  • 連想配列に要素を追加する時は配列のキーに一工夫必要

目次

配列の途中に要素を追加する

array_splice関数を使うと、配列の任意の場所に要素を追加することができます。

コード例

array_splice( $array, 2, 0, '追加する要素');

パラメータが少し多いですが、前から1つ目のパラメータは要素を追加する配列、2つ目は追加する位置、3つ目は置き換える要素数、4つ目が追加する要素の内容になります。
言葉だけだと分かりづらいため、実際にコードで動作をみていきましょう。

array_splice関数は配列の要素を置き換えるときにも使用するため3つ目のパラメータが必要なこともありますが、今回は置き換えではなく追加のみなので「0」を指定します。

コード例

<?php

// 配列を用意
$array = array( 'Shibaken', 'Pomeranian', 'Golden retriever', 'Greyhound', 'Siberian husky');

// 配列に要素を追加
array_splice($array, 2, 0, 'Akitaken');

// 配列の内容を出力
var_dump($array);

追加された後の配列を出力すると次のようになります。

出力例

array(6) {
	[0]=> string(8) "Shibaken"
	[1]=> string(10) "Pomeranian"
	[2]=> string(8) "Akitaken"
	[3]=> string(16) "Golden retriever"
	[4]=> string(9) "Greyhound"
	[5]=> string(14) "Siberian husky"
}

array_splice関数の2つ目のパラメータで指定した「2」の位置に「Akitaken」が追加されました。

複数の要素を追加する

array_splice関数の4つ目のパラメータには、配列形式で複数の要素を指定することも可能です。

コード例

<?php

// 配列を用意
$array = array( 'Shibaken', 'Pomeranian', 'Golden retriever', 'Greyhound', 'Siberian husky');

// 複数の要素を配列形式で用意
$array_add = array( 'Doberman', 'Tosaken', 'Poodle');

// 配列に要素を追加
array_splice($array, 2, 0, $array_add);

// 取り出した後の配列を出力
var_dump($array);

次のように配列を出力すると、複数の要素が追加されたことを確認できます。

出力例

array(8) {
	[0]=> string(8) "Shibaken"
	[1]=> string(10) "Pomeranian"
	[2]=> string(8) "Doberman"
	[3]=> string(7) "Tosaken"
	[4]=> string(6) "Poodle"
	[5]=> string(16) "Golden retriever"
	[6]=> string(9) "Greyhound"
	[7]=> string(14) "Siberian husky"
}

配列の先頭や末尾に要素を追加する場合はarray_unshift関数array_push関数を使った方が簡単ですが、途中の任意の位置に追加するには上記のようにarray_splice関数を使うと便利です。

連想配列に要素を追加する

array_splice関数は連想配列に要素を追加することも可能ですが、キーの指定ができないため挙動に注意する必要があります。

コード例

<?php

// 配列を用意
$array = array(
	'dog1' => array(
		'id' => 1,
		'name' => 'Shibaken',
		'age' => 3
	),
	'dog2' => array(
		'id' => 2,
		'name' => 'Pomeranian',
		'age' => 5
	),
	'dog3' => array(
		'id' => 3,
		'name' => 'Golden retriever',
		'age' => 6
	),
	'dog4' => array(
		'id' => 4,
		'name' => 'Greyhound',
		'age' => 2
	)
);

// 追加する要素を用意
$array_add = array(
	'dog5' => array(
		'id' => 5,
		'name' => 'Doberman',
		'age' => 4
	)
);

// 配列に要素を追加
array_splice($array, 2, 0, $array_add);

// 取り出した後の配列を出力
var_dump($array);

次のように配列を出力すると、複数の要素が追加されたことを確認できます。

出力例

array(5) {
	["dog1"]=> array(3) { ["id"]=> int(1) ["name"]=> string(8) "Shibaken" ["age"]=> int(3) }
	["dog2"]=> array(3) { ["id"]=> int(2) ["name"]=> string(10) "Pomeranian" ["age"]=> int(5) }
	[0]=> array(3) { ["id"]=> int(5) ["name"]=> string(8) "Doberman" ["age"]=> int(4) }
	["dog3"]=> array(3) { ["id"]=> int(3) ["name"]=> string(16) "Golden retriever" ["age"]=> int(6) }
	["dog4"]=> array(3) { ["id"]=> int(4) ["name"]=> string(9) "Greyhound" ["age"]=> int(2) }
}

配列のキーが「dog5」の状態で挿入されているといいのですが、実際には数値の添字で追加されます。
そのため、連想配列にキーを含めて要素を追加したい場合は、次のように関数を使わずに配列に要素を代入する形ととるか、foreach文でループしてキーを変更する方法を使う方法がおすすめです。

配列に要素を代入するコード例

<?php

// 配列を用意
$array = array(
	'dog1' => array(
		'id' => 1,
		'name' => 'Shibaken',
		'age' => 3
	),
	'dog2' => array(
		'id' => 2,
		'name' => 'Pomeranian',
		'age' => 5
	),
	'dog3' => array(
		'id' => 3,
		'name' => 'Golden retriever',
		'age' => 6
	),
	'dog4' => array(
		'id' => 4,
		'name' => 'Greyhound',
		'age' => 2
	)
);

$array['dog5'] = array(
	'id' => 5,
	'name' => 'Doberman',
	'age' => 4
);

この方法はシンプルで便利ですが、基本的に値は配列の末尾に追加されます。
どうしても要素を任意の位置に追加したい場合については、次のようにforeach文で配列をループさせて任意のキーを置き換える方法が1つの解決方法になります。

コード例

// 新しい配列とキーを用意
$new_array = null;
$new_key = 'dog5';

//$array_add = array( 'Doberman', 'Tosaken', 'Poodle');
$array = array(
	'dog1' => array(
		'id' => 1,
		'name' => 'Shibaken',
		'age' => 3
	),
	'dog2' => array(
		'id' => 2,
		'name' => 'Pomeranian',
		'age' => 5
	),
	'dog3' => array(
		'id' => 3,
		'name' => 'Golden retriever',
		'age' => 6
	),
	'dog4' => array(
		'id' => 4,
		'name' => 'Greyhound',
		'age' => 2
	)
);

// 追加する要素を用意
$array_add = array(
	array(
		'id' => 5,
		'name' => 'Doberman',
		'age' => 4
	)
);

// 配列に要素を追加
array_splice($array, 2, 0, $array_add);

foreach( $array as $key => $value ) {

	if( $key === 0 ){
		$new_array[$new_key] = $array[$key];
	} else {
		$new_array[$key] = $array[$key];
	}
}

// 取り出した後の配列を出力
var_dump($new_array);

array_splice関数で要素を追加するまではこれまでと同じです。
そのあとに、foreach文で配列から要素を1つずつ取得して新しい配列に書き写していきますが、特定のキーのみ新しいキー(今回は「dog5」)に置き換えるという処理を行います。
その結果、最後のvar_dump関数で新しい配列を出力すると次のようにキーも任意の状態で追加されることを確認することができます。

出力例

array(5) {
	["dog1"]=> array(3) { ["id"]=> int(1) ["name"]=> string(8) "Shibaken" ["age"]=> int(3) }
	["dog2"]=> array(3) { ["id"]=> int(2) ["name"]=> string(10) "Pomeranian" ["age"]=> int(5) }
	["dog5"]=> array(3) { ["id"]=> int(5) ["name"]=> string(8) "Doberman" ["age"]=> int(4) }
	["dog3"]=> array(3) { ["id"]=> int(3) ["name"]=> string(16) "Golden retriever" ["age"]=> int(6) }
	["dog4"]=> array(3) { ["id"]=> int(4) ["name"]=> string(9) "Greyhound" ["age"]=> int(2) }
}

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。