この記事では、PHPにおけるissetとarray_key_existsの違いを例を用いて説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:
1. 配列の値の判定が異なります。値が null または '' または false の場合、isset は false を返し、array_key_exists は true を返します。
2. isset は組み込み演算子、array_key_exists は PHP 組み込み関数であり、isset の方が高速です。参考:PHP関数の実装原理とパフォーマンス分析3. isset を使用して存在しないインデックス配列値にアクセスする場合、E_NOTICE php エラー メッセージは発生しません;
4.array_key_exists は get_define_vars を呼び出して、配列変数が存在するかどうかを判断します。isset は使用されません。
テストコード:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
機能 microtime_float() { list($usec, $sec) =explode(" ", microtime()); return ((float)$usec + (float)$sec); } $test_arr['aa']='dd'; $test_arr['bb']=''; $test_arr['cc']=NULL; $test_arr['dd']=false; $test_arr= array('aa'=>'dd','bb'=>'','cc'=>null,'dd'=>false); echo "isset aa は ";var_dump(isset($test_arr['aa']));echo "n"; echo "isset bb は ";var_dump(isset($test_arr['bb']));echo "n"; echo "isset cc は ";var_dump(isset($test_arr['cc']));echo "n"; echo "isset dd は ";var_dump(isset($test_arr['cc']));echo "n"; echo "isset none は ";var_dump(isset($test_arr['none']));echo "n"; echo "key_exist aa は ";var_dump(array_key_exists('aa',$test_arr));echo "n"; echo "key_exist bb は ";var_dump(array_key_exists('bb',$test_arr));echo "n"; echo "key_exist cc は ";var_dump(array_key_exists('cc',$test_arr));echo "n"; echo "key_exist dd は ";var_dump(array_key_exists('dd',$test_arr));echo "n"; echo "key_exist none は ";var_dump(array_key_exists('none',$test_arr));echo "n"; $time_start = microtime_float(); for($i=0;$i isset($test_arr['aa']); } $time_end = microtime_float(); $time = $time_end - $time_start; echo "isset 100 は $timen"; for($i=0;$i isset($test_arr['aa']); } $time_end = microtime_float(); $time = $time_end - $time_start; echo "isset 10000 は $timen"; for($i=0;$i isset($test_arr['aa']); } $time_end = microtime_float(); $time = $time_end - $time_start; echo "isset 1000000 は $timen"; //++++++++++++++++++++++++++++++ $time_start = microtime_float(); for($i=0;$i array_key_exists('aa',$test_arr); } $time_end = microtime_float(); $time = $time_end - $time_start; echo "array_key_exists 100 は $timen"; for($i=0;$i array_key_exists('aa',$test_arr); } $time_end = microtime_float(); $time = $time_end - $time_start; echo "array_key_exists 10000 は $timen"; for($i=0;$i array_key_exists('aa',$test_arr); } $time_end = microtime_float(); $time = $time_end - $time_start; echo "array_key_exists 1000000 は $timen"; |
この記事が皆様の PHP プログラミング設計に役立つことを願っています。