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

【PHP入門】キーを指定して配列の要素を削除する方法(unset関数の使い方)

PHPで配列の要素を削除するには、unset() 関数を使用します。削除したい要素のキー(インデックス)を指定することで、その要素だけを配列から取り除くことができます。

この記事では、一次元配列と多次元配列それぞれのケースで、キーを指定して要素を削除する具体的なコード例を紹介します。

例1:数値インデックスの配列から要素を削除する

まずは、基本的な一次元配列から特定のキーの要素を削除する例を見てみましょう。

<?php
   $arr = array("John", "Jacob", "Tom", "Tim");
   echo "Array with leading and trailing whitespaces...\n";
   foreach($arr as $value) {
      echo "Value = $value \n";
   }
   echo "\nComma separated list...\n";
   print_r(implode(', ', $arr));

   // 各要素の前後の空白を除去した新しい配列を作成
   $result = array_map('trim', $arr);

   echo "\nUpdated Array...\n";
   foreach($result as $value) {
      echo "Value = $value \n";
   }

   // キー「1」の要素(Jacob)を削除
   unset($result[1]);

   echo "\nUpdated Array...\n";
   foreach($result as $value) {
      echo "Value = $value \n";
   }
?>

出力結果

Array with leading and trailing whitespaces...
Value = John
Value = Jacob
Value = Tom
Value = Tim
Comma separated list...
John , Jacob , Tom , Tim
Updated Array...
Value = John
Value = Jacob
Value = Tom
Value = Tim
Updated Array...
Value = John
Value = Tom
Value = Tim

ポイント: unset($result[1]) を実行すると、キーが「1」の要素「Jacob」が配列から完全に削除されます。なお、unset() は残りの要素のキーを自動的に振り直さないため、インデックスには「0」と「2」「3」が残る点に注意してください。連番に戻したい場合は、array_values() 関数を使って再インデックス化できます。

例2:多次元配列(連想配列)から要素を削除する

次に、キーに文字列を使う連想配列や、入れ子になった多次元配列の場合の例です。

<?php
   $marks = array(
       "kevin" => array(
           "physics" => 95,
           "maths" => 90,
       ),
       "ryan" => array(
           "physics" => 92,
           "maths" => 97,
       ),
   );

   echo "Marks for kevin in physics : ";
   echo $marks['kevin']['physics'] . "\n";
   echo "Marks for ryan in maths : ";
   echo $marks['ryan']['maths'] . "\n";

   // キー「ryan」の要素を丸ごと削除
   unset($marks["ryan"]);

   echo "Marks for ryan in maths : ";
   echo $marks['ryan']['maths'] . "\n";
?>

出力結果

このコードを実行すると、次のような出力になります。最後の行では、すでに削除された要素へアクセスしようとしているため、エラー(Notice)が発生します。

Marks for kevin in physics : 95
Marks for ryan in maths : 97
Marks for ryan in maths :
PHP Notice: Undefined index: ryan in /home/cg/root/6985034/main.php on line 25

注意: unset() で削除済みのキーにアクセスすると、「Undefined index」という通知(Notice)が出ます。実運用のコードでは、isset()array_key_exists() でキーの存在を事前に確認してからアクセスするのが安全です。

まとめ

  • PHPで配列の要素を削除するには unset(配列[キー]) を使う
  • 数値インデックスでも文字列キー(連想配列)でも同じように削除できる
  • unset() 後はキーが詰められないため、必要なら array_values() で再インデックス化する
  • 削除後のキーへのアクセスはエラーになるので、存在チェックを行うのがベストプラクティス
  1. PHPのarray_key_exists()関数とは?使い方とサンプルコードを解説

    PHPのarray_key_exists()関数は、指定したキーが配列内に存在するかどうかをチェックするための関数です。キーが存在する場合は true を返し、存在しない場合は false を返します。基本構文array_key_exists(key, arr)パラメータkey − 存在を確認したいキーを指定します。文字列や整数など、配列のキーとして有効な値を指定できます。arr − キーを検索する対象となる配列を指定します。戻り値array_key_exists()関数は、指定したキーが配列内に存在すれば true を、存在しなければ false を返します。使用例以下の例では、連想配列の中

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

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