言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. array_splice() / array_slice()

array_splice() / array_slice()

対応: PHP 4(2000)

配列の任意の位置で要素を削除・挿入・置換したり、配列の一部を切り出す関数です。

構文

// 配列の指定位置から要素を削除・挿入・置換する
array_splice(配列, 開始位置, 削除する数, 挿入する配列);

// 配列の一部を切り出して新しい配列として返す
array_slice(配列, 開始位置, 長さ, キーを保持するか);

関数一覧

関数概要
array_splice($array, $offset, $length, $replacement)配列の指定位置から要素を削除し、必要に応じて新しい要素を挿入します。削除された要素を配列で返します。元の配列は変更されます。
array_slice($array, $offset, $length, $preserve_keys)配列の指定位置から指定した数だけ要素を切り出して新しい配列として返します。元の配列は変更されません。

サンプルコード

sample_array_splice.php
<?php
$members = ['岡部倫太郎', '牧瀬紅莉栖', '椎名まゆり', '橋田至', '阿万音鈴羽'];

// インデックス1から2つの要素を切り出す(元の配列は変わらない)
$sliced = array_slice($members, 1, 2);
print_r($sliced);

// 負のオフセットで末尾から切り出す
$last_two = array_slice($members, -2);
print_r($last_two);

// キーを保持して切り出す
$preserved = array_slice($members, 2, 2, true);
print_r($preserved);

// インデックス1から2つの要素を削除して、別の要素を挿入する
$items = ['A', 'B', 'C', 'D', 'E'];
$removed = array_splice($items, 1, 2, ['X', 'Y', 'Z']);
print_r($removed);
print_r($items);

// 要素を削除せずに挿入だけ行う
$list = ['月', '水', '金'];
array_splice($list, 1, 0, ['火']);
print_r($list);
array_splice.php
php array_splice.php
Array
(
    [0] => 牧瀬紅莉栖
    [1] => 椎名まゆり
)
Array
(
    [0] => 橋田至
    [1] => 阿万音鈴羽
)
Array
(
    [2] => 椎名まゆり
    [3] => 橋田至
)
Array
(
    [0] => B
    [1] => C
)
Array
(
    [0] => A
    [1] => X
    [2] => Y
    [3] => Z
    [4] => D
    [5] => E
)
Array
(
    [0] => 月
    [1] => 火
    [2] => 水
    [3] => 金
)

概要

『array_splice()』は元の配列を直接変更する破壊的な関数で、削除・挿入・置換を一度に行えます。第3引数を『0』にすれば削除せずに挿入だけを行うこともでき、第4引数を省略すれば削除だけを行うこともできます。

『array_slice()』は元の配列を変更しない非破壊的な関数です。第4引数に『true』を渡すと元のキーが保持されます。デフォルトでは数値キーは0から振り直されるため、キーの値が重要な場合は『true』を指定する。

配列の末尾や先頭だけを操作する場合は『array_push() / array_pop() / array_shift() / array_unshift()』のほうがシンプルに記述できます。

array_spliceは元の配列を変更する

array_splice()は元の配列を直接変更する(破壊的)。元の配列を保持したい場合はarray_slice()を使う。

<?php
$members = ['岡部倫太郎', '牧瀬紅莉栖', '椎名まゆり', '橋田至', '阿万音鈴羽'];

// array_splice: 元の配列を変更する
$copy1 = $members;
array_splice($copy1, 1, 2);
print_r($copy1); // 元の配列から2要素が削除される

// array_slice: 元の配列を変更しない
$copy2 = $members;
$sliced = array_slice($copy2, 1, 2);
print_r($copy2); // 元のまま
print_r($sliced); // 切り出した部分が新しい配列として返る
splice_destructive.php
php splice_destructive.php
Array
(
    [0] => 岡部倫太郎
    [1] => 橋田至
    [2] => 阿万音鈴羽
)
Array
(
    [0] => 岡部倫太郎
    [1] => 牧瀬紅莉栖
    [2] => 椎名まゆり
    [3] => 橋田至
    [4] => 阿万音鈴羽
)
Array
(
    [0] => 牧瀬紅莉栖
    [1] => 椎名まゆり
)

負のオフセットは末尾から数える

offset=-1は最後の要素の前を指す。array_slice()も同様の動作をする。

<?php
$members = ['岡部倫太郎', '牧瀬紅莉栖', '椎名まゆり', '橋田至', '阿万音鈴羽'];

// offset=-1 は末尾(阿万音鈴羽)の前 = 橋田至の後
$last = array_slice($members, -1);
print_r($last); // ['阿万音鈴羽']

// offset=-2 は後ろから2番目の前
$last_two = array_slice($members, -2);
print_r($last_two); // ['橋田至', '阿万音鈴羽']
splice_negative.php
php splice_negative.php
Array
(
    [0] => 阿万音鈴羽
)
Array
(
    [0] => 橋田至
    [1] => 阿万音鈴羽
)

第3引数に0を渡すと削除なしの挿入になる

長さ0を指定すると削除せずに挿入だけ行われる。nullを渡すと末尾まで削除されるので混同しないよう注意。

<?php
$members = ['岡部倫太郎', '椎名まゆり', '橋田至'];

// 第3引数が0: 削除なしで挿入
array_splice($members, 1, 0, ['牧瀬紅莉栖']);
print_r($members); // 岡部の後に牧瀬が挿入される

// 第3引数がnull: 指定位置から末尾まですべて削除
$members2 = ['岡部倫太郎', '椎名まゆり', '橋田至'];
array_splice($members2, 1, null);
print_r($members2); // ['岡部倫太郎'] のみ残る
splice_insert.php
php splice_insert.php
Array
(
    [0] => 岡部倫太郎
    [1] => 牧瀬紅莉栖
    [2] => 椎名まゆり
    [3] => 橋田至
)
Array
(
    [0] => 岡部倫太郎
)

実践パターン

リストの並び替え(要素を移動させる)

array_splice()を使って要素を別の位置に移動する例。

<?php
$members = ['岡部倫太郎', '牧瀬紅莉栖', '椎名まゆり', '橋田至', '阿万音鈴羽'];

// 椎名まゆり(インデックス2)を先頭に移動する
$moved = array_splice($members, 2, 1); // 取り出す
array_splice($members, 0, 0, $moved); // 先頭に挿入
print_r($members);
splice_move.php
php splice_move.php
Array
(
    [0] => 椎名まゆり
    [1] => 岡部倫太郎
    [2] => 牧瀬紅莉栖
    [3] => 橋田至
    [4] => 阿万音鈴羽
)

ページネーション(配列の一部を取り出す)

array_slice()でページ単位に配列を分割する例。

<?php
$all_members = ['岡部倫太郎', '牧瀬紅莉栖', '椎名まゆり', '橋田至', '阿万音鈴羽'];

$page = 2;
$per_page = 2;
$offset = ($page - 1) * $per_page;

$current_page = array_slice($all_members, $offset, $per_page);
echo 'ページ ' . $page . ':';
print_r($current_page);
splice_page.php
php splice_page.php
ページ 2:Array
(
    [0] => 椎名まゆり
    [1] => 橋田至
)

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。