PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

【PHP入門】配列から要素を削除してインデックスを振り直す方法

PHPで配列から特定の要素を削除するには unset() 関数を使用します。しかし、unset() は単に要素を取り除くだけなので、残りの要素のインデックス(キー)には欠番が生じたままになります。そこで、array_values() 関数を組み合わせることで、配列のインデックスを0から順に振り直すことができます。

サンプルコード

<?php
   $my_arr = array( 'this', 'is', 'a', 'sample', 'only');
   echo "元の配列:";
   var_dump($my_arr);
   unset($my_arr[4]);
   echo "削除・振り直し後の配列:";
   $my_arr_2 = array_values($my_arr);
   var_dump($my_arr_2);
?>

実行結果

元の配列:array(5) {
   [0]=>
   string(4) "this"
   [1]=>
   string(2) "is"
   [2]=>
   string(1) "a"
   [3]=>
   string(6) "sample"
   [4]=>
   string(4) "only"
}
削除・振り直し後の配列:array(4) {
   [0]=>
   string(4) "this"
   [1]=>
   string(2) "is"
   [2]=>
   string(1) "a"
   [3]=>
   string(6) "sample"
}

コードの解説

まず、文字列の値を5つ持つ配列が宣言され、var_dump() によって中身が出力されます。次に unset($my_arr[4]) を呼び出すことで、インデックス4の要素「only」が配列から削除されます。

この時点では要素数は4になっていますが、インデックスは [0]〜[3] のままではなく、[0][1][2][3] という形で欠番なく並んでいるわけではない点に注意が必要です。unset() 単体ではインデックスは振り直されないため、ここで array_values() 関数を適用すると、残りの要素に対して0から始まる連続した新しいインデックスが割り当てられます。最後にもう一度 var_dump() で出力し、変更が正しく反映されていることを確認しています。

補足:array_splice() を使う方法

unset()array_values() を組み合わせる代わりに、array_splice() 関数を使えば、要素の削除とインデックスの振り直しを1回の呼び出しで同時に行うことも可能です。

<?php
   $my_arr = array( 'this', 'is', 'a', 'sample', 'only');
   array_splice($my_arr, 4, 1); // インデックス4から1件削除
   var_dump($my_arr);
?>

用途に応じて両者を使い分けるとよいでしょう。単純にキーを指定して削除したい場合は unset()、位置を指定して削除しつつインデックスも整えたい場合は array_splice() が便利です。

  1. PHPで配列の最初の要素を取得する方法をわかりやすく解説

    PHPで配列の最初の要素を取得する方法はいくつかあります。ここでは、代表的な手法をサンプルコードとともに紹介します。例1:キーを直接指定して取得する連想配列の場合、先頭のキーがわかっていれば、そのキーを指定するだけで最初の要素にアクセスできます。<?php     $arr = array( p=>150, q=>100, r=>120, s=>110, t=>115, u=>103, v=>105, w=>125 );     echo 配列の値 ...\n;

  2. C#の配列から要素を削除する方法【サンプルコード付きで解説】

    C#の配列は固定長のため、要素を直接「削除」することはできません。そこで一般的に用いられるのが、削除したい位置以降の要素を一つ前へずらす(シフトする)ことで、実質的にその要素を取り除く手法です。 基本的な考え方:要素をシフトして削除する まず、次のように5つの要素を持つ配列を用意します。 int[] arr = new int[5] {35, 50, 55, 77, 98}; たとえば2番目の位置(pos = 2、つまり arr[1])の要素「50」を削除したい場合は、その位置より後ろにある要素をすべて一つずつ前に移動させます。 // 削除位置以降の要素を前方へシフト for (i