phpのarray_key_exists()配列関数の使い方の詳しい説明

怪我咯
リリース: 2023-03-13 06:04:01
オリジナル
1348 人が閲覧しました

この記事では、phpの配列関数array_key_exists()とin_arrayとのパフォーマンス比較、およびissetとの違い分析についての関連知識をまとめて紹介しています。それを参照できます。

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

array_key_exists(key,array);

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

<?php
$a = array(&#39;a&#39;=>&#39;Dog&#39;,&#39;b&#39;=>&#39;Cat&#39;);
if(array_key_exists(&#39;a&#39;,$a)){
  echo &#39;Key exists!&#39;;
} else{
  echo &#39;Key does not exist!&#39;;
}
?>
ログイン後にコピー

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

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

array_key_exists と in_array クエリは別のものですよね?
array_key_exists はキー値があるかどうかを決定します
array_key_exists(a,arr)->if(isset(arr[a])) が true

そして in_array はトラバースする必要があります値

を走査した後にのみループから抜け出してください。 質問:
配列のインデックスには別のストレージ ユニットがあり、最適化されていますか? array_key_exists の時間計算量は o(1) ですが、in_array は o(n) ですか??

さらなる答え:
複雑さの点では、これです

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

in_array を一度走査して、それらが同じであるかどうかを取得したい場合は、そうではありません。それをトラバースする必要があるかどうかはわかりません

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 エラー メッセージは表示されません。配列変数が存在するかどうか。isset は使用されません。

テストコード:

<?php
function
microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$test_arr[&#39;aa&#39;]=&#39;dd&#39;;
$test_arr[&#39;bb&#39;]=&#39;&#39;;
$test_arr[&#39;cc&#39;]=NULL;
$test_arr[&#39;dd&#39;]=false;
$test_arr= array(&#39;aa&#39;=>&#39;dd&#39;,&#39;bb&#39;=>&#39;&#39;,&#39;cc&#39;=>null,&#39;dd&#39;=>false);
echo "isset aa is ";var_dump(isset($test_arr[&#39;aa&#39;]));echo "n";
echo "isset bb is ";var_dump(isset($test_arr[&#39;bb&#39;]));echo "n";
echo "isset cc is ";var_dump(isset($test_arr[&#39;cc&#39;]));echo "n";
echo "isset dd is ";var_dump(isset($test_arr[&#39;cc&#39;]));echo "n";
echo "isset none is ";var_dump(isset($test_arr[&#39;none&#39;]));echo "n";
echo "key_exist aa is ";var_dump(array_key_exists(&#39;aa&#39;,$test_arr));echo "n";
echo "key_exist bb is ";var_dump(array_key_exists(&#39;bb&#39;,$test_arr));echo "n";
echo "key_exist cc is ";var_dump(array_key_exists(&#39;cc&#39;,$test_arr));echo "n";
echo "key_exist dd is ";var_dump(array_key_exists(&#39;dd&#39;,$test_arr));echo "n";
echo "key_exist none is ";var_dump(array_key_exists(&#39;none&#39;,$test_arr));echo "n";
$time_start = microtime_float();
for($i=0;$i<100;$i++){
isset($test_arr[&#39;aa&#39;]);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "isset 100 is $timen";
for($i=0;$i<10000;$i++){
isset($test_arr[&#39;aa&#39;]);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "isset 10000 is $timen";
for($i=0;$i<1000000;$i++){
isset($test_arr[&#39;aa&#39;]);
}
$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(&#39;aa&#39;,$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(&#39;aa&#39;,$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(&#39;aa&#39;,$test_arr);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "array_key_exists 1000000 is $timen";
ログイン後にコピー

以上がphpのarray_key_exists()配列関数の使い方の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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