Standing on the Shoulder of Linus

Home / 2011 / 11月 / 09 / array_key_existsとisset

array_key_existsとisset

array_key_exists と isset の違いについて、プログラミングPHP 第2版(PHP技術者認定機構上級試験の教材)の第5章 配列で紹介されていました。

検証してみました。テストに lime.php を利用しています。

require('lime.php');
$t = new lime_test(null,new lime_output_color);
$zeroarray = array(0);
$emptyarray = array("");
$nullarray = array(NULL);
$t->diag('isset test');
$t->is(isset($zeroarray[0]),true,'zeroarray[0]');
$t->is(isset($emptyarray[0]),true,'emptyarray[0]');
$t->is(isset($nullarray[0]),true,'nullarray[0]');
$t->diag('array_key_exists test');
$t->is(array_key_exists(0,$zeroarray),true,'zeroarray');
$t->is(array_key_exists(0,$emptyarray),true,'emptyarray');
$t->is(array_key_exists(0,$nullarray),true,'nullarray');

出力結果は下記のようになります。
# isset test
ok 1 - zeroarray[0]
ok 2 - emptyarray[0]
not ok 3 - nullarray[0]
# Failed test (./null.php at line 9)
# got: false
# expected: true
# array_key_exists test
ok 4 - zeroarray
ok 5 - emptyarray
ok 6 - nullarray
1..6
# Looks like you failed 1 tests of 6.

配列のキーが NULL の場合、isset は false, array_key_exists は true となることが確かめられました。公式マニュアルでも、issetは、「変数がセットされていること、そして NULL でないことを検査する」となっています。

なお、速度では isset が array_key_exists に勝ります。なので、(NULL のケースで問題が生じるのでなければ)isset を使う、というのが良いようです。

関連

Posted in php | Tagged isset, テスト
← git でタグを打つ 閉じ込められた23人 THE PARADOX →

アーカイブ

人気の投稿とページ

  • キンドル本を印刷する(PDFに変換する)方法
  • 名古屋駅から国際センターまでの道のり(徒歩)
  • AGPL ライセンス(GPLとは似ているが違いもある)
  • 問い合わせフォーム改善: 選択肢により条件分岐し、項目の表示非表示を変更する
  • JP-Secure SiteGuard WP Pluginは不正ログイン防止に役立つか

プロフィール

水野史土:月70万PVホームページ制作会社のレスキューワーク株式会社で、PHPソフトウェアのサポートを行っている。concrete5コミュニティリーダー、Novius OSコアコード貢献者でもある。 詳しくは管理者詳細参照。
大好評WordPress書籍「WordPressユーザーのためのPHP入門 はじめから、ていねいに。」サポートページ

Copyright © 2015 Standing on the Shoulder of Linus.