最終更新日:
公開日:
レシピ
配列
配列の指定した場所に値を追加する
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) }
}
こちらの記事は役に立ちましたか?
コメントありがとうございます!
運営の参考にさせていただきます。
ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。