PHPで配列を作成することは多々あります。
ただ、配列の一部を削除することはあまりありません。
なぜなら、削除するなら初めから配列を作らなければよいからです。
なので、配列の一部を削除する方法について知りませんでした。
ところが、今回配列の一部を削除しなければいけない事象がありました。
そもそも可能なのか?
という疑問も含め、調べてみました。
配列の一部を削除する必要が発生した経緯
そもそもなぜ配列の一部を削除しなければいけなかったのか?
について説明いたします。
ズバリセッション情報の削除です。
具体的には、管理画面制作時に必要な情報をセッションに保存しています。
ログアウト時に、セッションに保存した任意の情報を削除する必要がありました。
次回ログイン時に誤動作させないためです。
ただ、セッション情報すべてを消すわけにはいかず、一部の情報だけを削除する必要がありました。
それで、配列の一部を削除する必要が発生したのです。
というわけで、いつものごとくググって調べました。
unset()関数だけで実現できました
例えば次のような配列があるとします。
$table = array("test01", "test02", "test03");
この中で「test02」だけを削除するとします。
次のような記述で「test02」だけを削除できます。
unset($table[1]);
たったこれだけで、配列の特定メンバだけを削除できました。
unset()ってなんとなくunset($table); というように、配列全部を削除するイメージでしたが、メンバ名を指定することもできることを今回学びました。
ちなみに任意のメンバ名を付けた場合も削除できます。
サンプルは、メンバ名を省略したパターンでしたが、次のような配列でも特定メンバを削除できます。
$table = array("nokosu01"=>"test01", "sakujyo"=>"test02", "nokosu02"=>"test03");
任意のメンバ名を付けた場合は次のように指定します。
“test02″を削除する例
unset($table["sakujyo"]);
メンバ名省略時は、数字を指定しますが、任意名称がある場合はその名称で指定します。
配列参照と同じです。
予想外のことはありうるものです
配列の一部を削除するなんて、そもそも意味がないと思っていましたが、今回セッションという全部消してはいけない配列の場合、一部削除が必要という体験をしました。
考えが偏っていると、思いがけない事象で頭を抱えることになります。
発想を柔らかくしておくことが大事だとつくづく思いました。