1

配列内のnull値を検出する方法を調査しているときに、 http://www.php.net/manual/en/function.array-key-exists.phpマニュアルページでユーザーのコメントに出くわしました。

それは言った

if (isset(..) || array_key_exists(...))
{
...
}

するよりも速い

if array_key_exists(...))
{
...
}

100000回の実行で投稿されたベンチマークは

array_key_exists() : 205 ms
is_set() : 35ms
isset() || array_key_exists() : 48ms

私の質問:

(isset(..) || array_key_exists(...))より速いですarray_key_exists()か?もしそうなら、なぜですか?

編集:この質問を書くことで、私は自分の答えを見つけたと思います。とにかく質問を投稿して、私の考えが正しいかどうかを確認することにしました。

4

3 に答える 3

5

どちらが速いかは、チェックしているアレイによって異なります。配列にnull、 ""、または0以外の値が含まれている場合

if (isset(..) || array_key_exists(...)){    
}

上記のコードはissetチェックされてからコードが実行されるため、より高速になります。Array_key_exists実行されません。

配列にnull、 ""、または0の値が含まれている場合は、issetテストされてからarray_key_exists。これは、array_key_existsを単独でテストするよりも時間がかかります。

したがって、どちらが速いかという質問は、チェックしている配列に大きく依存します。

多くの人がそれは本当に問題ではないと言っています。彼らはそれが問題ではない理由を説明しませんでした。速度の向上はごくわずかなので、気にする価値はないということだと思います。また、どちらが速いかは、配列に割り当てられた値に依存することを意味する場合もあります(したがって、毎回異なります)。

ただし、最終的には、ほとんどのキーにnull、 ""、または0以外の値が割り当てられることがわかっていて、null値がいつ割り当てられるかを実際に判断する必要がある場合は、次を使用します。

if (isset(..) || array_key_exists(...)){    
}
于 2012-03-16T11:34:11.580 に答える
0

申し訳ありませんが、配列内のnull値を検出するには、最初にin_arrayを使用して配列をチェックします。これにより、配列に「null」が含まれているかどうかがわかります。実際に何を達成したいのかよくわかりませんが、null値を見つけたいですか?詳細を教えていただければ編集します。

于 2012-03-14T03:33:43.077 に答える
0

最も信頼できる方法はisset() || array_ky_exists()、最もチェックする方法であり、短絡評価はプロセスをスピードアップします。

ただし、pstがコメントで述べたように:It just doesn't matter。実際、最終的にはほとんど違いはありません。

基本的には、そうではありません。結局、基本的な数学は、2つのチェックが1つのチェックより速くないことを教えてくれます。

于 2012-03-14T03:35:56.837 に答える