php 指定した範囲の値を置換する

  • 作成日 2021.09.13
  • php
php 指定した範囲の値を置換する

phpで、array_spliceを使用して、指定した範囲の値を置換するサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Linux release 8.0.1905 (Core)
  • php 8.0.0
  • nginx 1.14.1

array_splice使い方

array_spliceを使用すれば、指定した範囲の値を置換することが可能です。

array_splice(配列,開始位置,数,置換する値);
// 開始位置は0から

以下は、配列の指定した範囲の値を置換するサンプルコードとなります。

<?php

$arr = ["aaa", "bbb", "ccc", "ddd", "eee", "fff"];

// 開始位置bbb から 2つを置換
$result = array_splice($arr, 1, 2,["BBB","CCC"]);

print_r($result);

print_r($arr);

実行結果

[result]
Array
(
    [0] => bbb
    [1] => ccc
)

[arr]
Array
(
    [0] => aaa
    [1] => BBB
    [2] => CCC
    [3] => ddd
    [4] => eee
    [5] => fff
)

第二引数を「0」にすると、指定した位置の前に値が追加されます。

<?php

$arr = ["aaa", "bbb", "ccc"];

// 開始位置bbbの前に2つを追加
$result = array_splice($arr, 1, 0,["BBB","CCC"]);

print_r($result);

print_r($arr);

実行結果

[result]
Array
(
)

[arr]
Array
(
    [0] => aaa
    [1] => BBB
    [2] => CCC
    [3] => bbb
    [4] => ccc
)

第四引数を省略すると削除されます。

<?php

$arr = ["aaa", "bbb", "ccc", "ddd", "eee", "fff"];

// 開始位置aaaから3つ
$result = array_splice($arr, 0, 3);

print_r($result);

print_r($arr);

実行結果

[result]
Array
(
    [0] => aaa
    [1] => bbb
    [2] => ccc
)

[arr]
Array
(
    [0] => ddd
    [1] => eee
    [2] => fff
)

また、開始位置をマイナスにすると後ろから数えることが可能です。

<?php

$arr = ["aaa", "bbb", "ccc", "ddd", "eee", "fff"];

// 開始位置後ろから2番目のeeeから2つ
$result = array_splice($arr, -2, 2,["EEE","FFF"]);

print_r($result);

print_r($arr);

実行結果

[result]
Array
(
    [0] => eee
    [1] => fff
)

[arr]
Array
(
    [0] => aaa
    [1] => bbb
    [2] => ccc
    [3] => ddd
    [4] => EEE
    [5] => FFF
)

また、範囲を超えてもエラーにならず、追加したい値が追加されます。

<?php

$arr = ["aaa", "bbb", "ccc", "ddd", "eee", "fff"];

// 範囲を超える
$result = array_splice($arr, 0, 10,["AAA", "BBB", "CCC", "DDD", "EEE", "FFF","GGG"]);

print_r($result);

print_r($arr);

実行結果

[result]
Array
(
    [0] => aaa
    [1] => bbb
    [2] => ccc
    [3] => ddd
    [4] => eee
    [5] => fff
)

[arr]
Array
(
    [0] => AAA
    [1] => BBB
    [2] => CCC
    [3] => DDD
    [4] => EEE
    [5] => FFF
    [6] => GGG
)