ホームページ > バックエンド開発 > PHPチュートリアル > PHPの配列関数array_key_existsの概要

PHPの配列関数array_key_existsの概要

WBOY
リリース: 2016-07-29 09:10:16
オリジナル
1107 人が閲覧しました

array_key_exists() 関数は、指定されたキーが配列内に存在するかどうかを判断します。キーが存在する場合は true を返し、存在しない場合は false を返します

array_key_exists(key, array);

key: required。キー名
array を指定します: 必須。入力配列を指定します

<&#63;php
$a = array('a'=>'Dog','b'=>'Cat');
if(array_key_exists('a',$a)){
  echo 'Key exists!';
} else{
  echo 'Key does not exist!';
}
?>

ログイン後にコピー

出力: キーが存在します!

なぜ array_key_exists は in_array よりも速いのですか?

array_key_exists と in_array は別のクエリを実行します。 value traversal 到着した場合にのみループから抜け出す

質問:

配列

のインデックスは別個のストレージ ユニットであり、最適化されていますか? array_key_exists の時間計算量は o(1) ですが、in_array は o(n) ですか? ?

フォローアップ:
これは複雑さの点で当てはまります

array_key_exists は、特定のキーに値があるかどうかを判断することです


in_array が同じかどうかを取得するために一度走査する必要があります。構築の場合にトラバースする必要があるかどうかはわかりません

PHP

1のissetとarray_key_existsの違い。値がnullまたは''またはfalseの場合、issetはfalseを返し、array_key_existsは異なります。 true を返します。

2. 実行効率が異なり、isset は組み込み演算子、array_key_exists は PHP 組み込み関数、isset の方が高速です。参照してください: PHP 関数の実装原理とパフォーマンス分析

3. isset を使用して存在しない

index

配列値にアクセスする場合、PHP エラー メッセージ E_NOTICE は表示されません。

4.array_key_exists は get_defined_vars を呼び出します。配列変数が存在するかどうかを判断します。isset は使用されません。

テスト コード:

<&#63;php
function
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 is ";var_dump(isset($test_arr['aa']));echo "n";
echo "isset bb is ";var_dump(isset($test_arr['bb']));echo "n";
echo "isset cc is ";var_dump(isset($test_arr['cc']));echo "n";
echo "isset dd is ";var_dump(isset($test_arr['cc']));echo "n";
echo "isset none is ";var_dump(isset($test_arr['none']));echo "n";
echo "key_exist aa is ";var_dump(array_key_exists('aa',$test_arr));echo "n";
echo "key_exist bb is ";var_dump(array_key_exists('bb',$test_arr));echo "n";
echo "key_exist cc is ";var_dump(array_key_exists('cc',$test_arr));echo "n";
echo "key_exist dd is ";var_dump(array_key_exists('dd',$test_arr));echo "n";
echo "key_exist none is ";var_dump(array_key_exists('none',$test_arr));echo "n";
$time_start = microtime_float();
for($i=0;$i<100;$i++){
isset($test_arr['aa']);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "isset 100 is $timen";
for($i=0;$i<10000;$i++){
isset($test_arr['aa']);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "isset 10000 is $timen";
for($i=0;$i<1000000;$i++){
isset($test_arr['aa']);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "isset 1000000 is $timen";
//++++++++++++++++++++++++++++++
$time_start = microtime_float();
for($i=0;$i<100;$i++){
array_key_exists('aa',$test_arr);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "array_key_exists 100 is $timen";
for($i=0;$i<10000;$i++){
array_key_exists('aa',$test_arr);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "array_key_exists 10000 is $timen";
for($i=0;$i<1000000;$i++){
array_key_exists('aa',$test_arr);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "array_key_exists 1000000 is $timen";
ログイン後にコピー

上記では、インデックス作成を含む PHP 配列関数 array_key_exists の概要を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート