こんにちは!家の収納や荷物の詰め込みが得意なmuramatsuです。
プログラムを作成していて、必要なくなった変数や、配列の要素が出てきたことはありませんか?
不要になった変数をそのままにしておくと
何らかのバグが起こってしまった
不要な配列の要素をそのままループ処理をしてしまい余分な容量がかかってしまった
などとトラブルの元になってしまう恐れがありますよね。
そこでPHPでは、unset関数を使って変数や配列・連想配列の要素を削除することができます。
この記事では、
- unset関数とは
- unset関数で変数を削除する方法
- unset関数で配列を削除する方法
- unset関数で連想配列の要素(値)を削除する方法
という基本的な内容から、
- 要素番号を詰める方法
- unset関数以外で配列を削除する方法
などの応用的な使い方に関しても説明していきます。
今回はそんなunset関数について、わかりやすく解説します!
unset関数とは
unset関数とは指定した変数や配列の要素などを削除するときに使用します。
不要になった変数や配列の要素を破棄してくれるので、トラブルを防ぐことにもつながります。
基本コードの書き方
変数、配列の要素、連想配列のキーをしていして削除するそれぞれの基本コードの書き方を見ていきましょう。
変数指定
基本構文
unset($変数1[, $変数2 …])
引数:
引数には1つ、または複数の変数を指定します。
配列の要素指定
基本構文
$array = [‘要素1’, ‘要素2’, ‘要素3’, ‘要素4’, ‘要素5’]; unset($array[2]);
引数:
引数には配列名または、配列名と[要素番号]を指定します。
配列名のみを指定した場合は、指定した配列自体が削除されます。
連想配列のキーを指定
基本構文
$array = [ 'item1' => '要素1', 'item2' => '要素2', 'item3' => '要素3', 'item4' => '要素4', 'item5' => '要素5' ]; unset($array['item2']);
引数:
引数には配列名または、配列名と[キー]を指定します。
配列名のみを指定した場合は、指定した配列自体が削除されます。
なお、unset関数には返り値はありません。
見てみると、とってもシンプルで簡単なのが分かりますね。
unset関数の使い方
それではunset関数の実践的な使い方をもっと詳しく見ていきましょう。
変数を削除・複数削除する
まずはunset関数で変数を削除する簡単なサンプルコードです。
<?php //$valを定義 $val = 100; echo '削除前:'.$val.'<br>'; //unsetで$valを削除 unset($val); echo '削除後:'.$val; ?>
実行結果:
削除前:100 削除後:
unset関数を使用すると、変数が削除されていることがわかりますね。
次にいくつかある変数を複数削除してみましょう。
<?php //$val1~5を定義 $val1 = 100; $val2 = 600; $val3 = 800; $val4 = 400; $val5 = 200; $val6 = 500; echo '削除前:'; echo $val1. '<br>'; echo $val2. '<br>'; echo $val3. '<br>'; echo $val4. '<br>'; echo $val5. '<br>'; echo $val6. '<br>'; echo '<br>'; //unsetで$val2,3,5を削除 unset($val2, $val3, $val5); echo '削除後:'; echo $val1. '<br>'; echo $val2. '<br>'; echo $val3. '<br>'; echo $val4. '<br>'; echo $val5. '<br>'; echo $val6. '<br>'; ?>
実行結果:
削除前:100 600 800 400 200 500 削除後:100 Notice: Undefined variable: val2 in C:\xampp\htdocs\testcode5.php on line 28 Notice: Undefined variable: val3 in C:\xampp\htdocs\testcode5.php on line 29 400 Notice: Undefined variable: val5 in C:\xampp\htdocs\testcode5.php on line 31 500
変数$val1~5を定義してunset($val2, $val3, $val5);のように削除したい変数をカンマ(,)で区切りunsetでまとめて削除しました。
実行結果では、削除した$val2、$val3、$val5が表示されるはずの場所にエラーが表示されていることから、削除されているのが分かりますね。
※ここではあえて削除した変数もechoで出力するようにしましたが、出力はせず削除した変数を除いて出力すると、エラーは出ません。
配列・配列の要素を削除・要素番号を詰める
次に配列の場合の削除方法を見てみましょう。
まずはunsetで配列自体を削除してみます。
<?php $fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //配列の指定した要素を削除 unset($fruits); print_r($fruits); ?>
実行結果:
Notice: Undefined variable: fruits in C:\xampp\htdocs\testcode5.php on line 8
unset($fruits);で配列($fruits)を指定して削除しました。
実行結果をみてわかるように、エラーになっていますね。
これは指定した配列がないということでエラーになっているので、削除されたことが分かります。
次に配列の要素を削除してみましょう。
<?php //配列を定義 $fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //配列の指定した要素を削除 unset($fruits[2]); print_r($fruits);
実行結果:
Array ( [0] => apple [1] => orange [3] => banana [4] => pineapple )
分かりやすくするためにprint_rを使って配列のキー(要素番号)と要素(値)を表示させるようにしました。
unset($fruits[2]);で対象の$配列($fruits)を指定し、四角カッコ([ ])に削除したい配列のキー(2)を指定しました。
実行結果のとおり、指定した配列の2番目の要素(‘melon’)が削除されていることがわかりますね。
さてここでお気づきかもしれませんが、2番目の値は削除したので、抜かされて表示されています。
unset関数の注意点として、配列の要素を削除したときに配列の要素番号は変更されません。
そのため、要素番号をその分前に詰めたい場合はarray_values関数を使用します。
はじめにunset関数で配列の要素を削除した後、array_values関数で要素番号を詰める必要があります。
以下、array_valuesを使ったサンプルコードとなります。
<?php //配列を定義 $fruits1 = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //配列の指定した要素を削除 unset($fruits1[2]); print_r($fruits1); //要素番号を詰める $fruits2 = array_values($fruits1); print_r($fruits2); ?>
実行結果:
Array ( [0] => apple [1] => orange [3] => banana [4] => pineapple ) Array ( [0] => apple [1] => orange [2] => banana [3] => pineapple )
unset($fruits1[2]);で配列($fruits)を指定して、四角カッコ([ ])に削除したいキー(要素番号[2])を指定しました。
削除された2番目の’melon’は削除されたのが、$fruits1の出力結果でわかります。
新しく変数($fruits2)を作り、そこにarray_valuesで$fruits1を指定して要素番号を連続にした配列を代入してprint_rで$fruits2を出力しました。
array_values関数を使用すれば、配列の要素番号を詰められることがわかりますね。
連想配列の要素を削除する
連想配列の要素を削除するときは、削除したいキーを指定します。
<?php //配列を定義 $fruits = [ 'item1'=>'apple', 'item2'=>'orange', 'item3'=>'melon', 'item4'=>'banana', 'item5'=>'pineapple' ]; //配列の指定した要素を削除 unset($fruits['item3']); print_r($fruits); ?>
実行結果:
Array ( [item1] => apple [item2] => orange [item4] => banana [item5] => pineapple )
連想配列の場合も配列の時と同じように書いていきます。
unset($fruits[‘item3’]);で配列($fruits)を指定し、四角カッコ([ ])に削除したいキー([‘item3’])を指定します。
また、キーに対して値(要素)を詰めたいときは、配列の時と同じくarray_valuesを使用します。
unset関数以外で配列を削除する
ここまで配列の要素1つを削除する方法を解説してきましたが、複数の要素をまとめて削除したい、と思いませんか?
実はunset関数では複数の要素をまとめて削除することができません。
そこでPHPでは下記のように配列を操作するさまざまな関数が用意されています。
関数 | 用途 |
---|---|
array_splice | ・削除した要素を置換 ・指定した位置以降の要素をまとめて削除 |
array_diff | 二つの配列の要素を比べて、比較した配列要素が持っていない要素を削除 |
array_shift | 配列の要素の0番目(先頭)を削除 |
array_pop | 配列の一番最後の要素より前を削除 |
以下、それぞれのサンプルコードです。
array_splice
指定した位置以降の要素をまとめて削除
<?php $fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //array_spliceで配列の指定した2番目から4番目までの要素を削除する array_splice($fruits, 2, 4); print_r($fruits); ?>
実行結果:
Array ( [0] => apple [1] => orange )
配列2番目の’melon’から4番目の’pineapple’までが削除されましたね。
削除して置換する
<?php $fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //array_spliceで指定した配列の2番目から1つの要素を置換する array_splice($fruits, 2, 1, "watermelon"); print_r($fruits); ?>
実行結果:
Array ( [0] => apple [1] => orange [2] => watermelon [3] => banana [4] => pineapple )
配列2番目の’melon’1つのみ、’watermelon’に置換されましたね。
array_diff
比較した配列要素が持っていない要素を削除
<?php $fruits1 = ['apple', 'orange', 'melon', 'banana', 'pineapple']; $fruits2 = ['apple', 'orange', 'melon']; //array_diffで差分を取得する $fruits = array_diff($fruits1, $fruits2); print_r($fruits); ?>
実行結果:
Array ( [3] => banana [4] => pineapple )
配列$fruits1と$fruits2を比べると、’banana’と’pineapple’が$fruits2には含まれていないので、この2つ以外が削除されました。
array_shift
配列要素の0番目(先頭)を削除
<?php $fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //array_shiftで配列要素の先頭を削除する array_shift($fruits); print_r($fruits); ?>
実行結果:
Array ( [0] => orange [1] => melon [2] => banana [3] => pineapple )
配列の先頭にあった’apple’が削除され、残りの要素が詰められて出力されます。
array_pop
配列の一番最後の要素を削除
<?php $fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //array_popで配列要素の末尾を削除する array_pop($fruits); print_r($fruits); ?>
実行結果:
Array ( [0] => apple [1] => orange [2] => melon [3] => banana )
配列の一番最後にある’pineapple’が削除されているのが分かりますね。
いかがですか?
unset以外にもたくさん配列の要素を削除する方法がありましたね。
配列を削除するさまざまな方法については、以下の記事で詳しく解説しています。
この記事もぜひ読んでみてください!
まとめ
ここでは配列を削除する方法として、
- unset関数とは
- unset関数で変数を削除する方法
- unset関数で配列を削除する方法
- unset関数で連想配列の要素を削除する方法
- unset関数以外の配列を削除するさまざまな方法
などについて解説しました。
ここで解説したunsetの使い方はよく理解しておきましょう。
もし、unset関数の使い方を忘れてしまったら、この記事を思い出してくださいね!