PHP

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

  1. 最終更新日:
  2. 公開日:

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

この記事のポイント

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

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

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

PHP コード例

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

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

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

PHP コード例

<?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 コード例

<?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 コード例

<?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つの解決方法になります。

PHP コード例

// 新しい配列とキーを用意
$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) }
}

記事一覧