3
3

More than 3 years have passed since last update.

PHPのarray_splice関数の挙動を確認する

Posted at

array_splice関数とは

array_splice関数は、配列の任意の場所に要素を追加したり、既存の要素を置き換えたり削除したりといった処理を行う。

array_splice関数の構文

array_splice ( array &$input , int $offset [, int $length = count($input) [, mixed $replacement = array() ]] ) : array

&$input     //操作対象の配列
$offset     //要素の抽出開始位置
$length     //取り出す要素数
$replacement//削除個所に挿入する配列

array_splice関数を使ってみる

daihyou.php
$data = ['本田', '長友', '香川', '長谷部', '遠藤',];
print_r(array_splice($data, 2, 3, ['久保', '中村', '室谷']));
//Array ( [0] => 香川 [1] => 長谷部 [2] => 遠藤 ) 
print_r($data);
//Array ( [0] => 本田 [1] => 長友 [2] => 久保 [3] => 中村 [4] => 室谷 )

2行目のsplice関数の引数をまとめると下記の表になる。

意味
第一引数 $data 捜査対象の配列
第二引数 2(香川) 要素の抽出開始位置
第三引数 3(香川、長谷部、遠藤) 取り出す要素数
第四引数 ['久保', '中村', '室谷'] 削除個所に挿入する配列

2行目のsplice関数は戻り値として置き換えによって除去された要素
を返す。(置き換え後の値ではないので注意)

4行目の$dataprint_r関数で出力すると、置き換えられている。

第二、第三引数に負数を指定

splice関数の第二第三引数に負数を指定することが出来る。

$data = ['本田', '長友', '香川', '長谷部', '遠藤',];
print_r(array_splice($data, -3, -2, ['小川', '権田']));
//Array ( [0] => 香川 )
print_r($data);
//Array ( [0] => 本田 [1] => 長友 [2] => 小川 [3] => 権田 [4] => 長谷部 [5] => 遠藤 )

第二第三引数に負数を指定した場合、配列の末尾を-1として、そこからさかのぼって数えた位置をそれぞれ開始/終了位置とする。
第三引数は、配列末尾から残す要素の数を表しているといえる。(2個(長谷部と遠藤)だけ残す)

意味
第一引数 $data 操作対象の配列
第二引数 -3(香川) 要素の抽出開始位置
第三引数 -2(香川)「長谷部、遠藤」 取り出す要素数(残す要素数)
第四引数 ['小川', '権田'] 削除個所に挿入する配列

引数を省略

引数を省略した場合、array_splice関数は指定された要素を削除する。

$data = ['本田', '長友', '香川', '長谷部', '遠藤',];
print_r(array_splice($data, 3));
//Array ( [0] => 長谷部 [1] => 遠藤 )
print_r($data);
//Array ( [0] => 本田 [1] => 長友 [2] => 香川 )

第三引数に0を指定

第三引数に0を指定すると、arrat_splice関数は配列に第四引数に指定した値を挿入する。

$data = ['本田', '長友', '香川', '長谷部', '遠藤',];
print_r(array_splice($data, 1,0,['興梠', '宇佐美']));
//Array ( ) 
print_r($data);
//Array ( [0] => 本田 [1] => 興梠 [2] => 宇佐美 [3] => 長友 [4] => 香川 [5] => 長谷部 [6] => 遠藤 )

上記は厳密にいうと、「2番目から0個の要素を第四引数の内容で置き換えなさい」という意味になる。結果として、2番目の要素の直前に新しい要素が挿入される。

参考

・独習PHP
・PHP公式リファレンス

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3