[PHP-dev 702] array_intersect/diff_assoc()

Yasuo Ohgaki php-dev@php.gr.jp
Wed, 19 Feb 2003 09:45:13 +0900


大垣です。

前から気になっていたのですが、array_intersect/diff_assoc()の実装
おかしくないでしょうか?

array_intersect/diff_assoc()はarray_intersect/diff_both()
(このような関数はありません)の様な動作をします。
# array_intersect/diff_assoc()はキーと値の両方が一致/一致しない
# ことをチェックします。array_intersect/diff()は値だけを参照します。

本来(?)なら

$expected_values = array('fist_name'=>1, 'last_name'=>1, 'submit'=>1);

if (count(array_diff_assoc($_POST, $expected))) {
  // User is trying to crack your web site
  trigger_error('Invalid input', E_USER_ERROR);
}

といった感じで効率的に入力チェックができる関数になるのですが、現状の
仕様ではあまり用途が多くないように思えます。

もちろん、array_flip、array_diffを使って同様のことができます。
しかし、2つの配列の場合、O(n)で実行できるところがquick sortを使っ
ているのでO(n log n)になってしまう上、更に余分な配列を初期化する
必要があり非効率です。

私は現在の関数名と仕様に合理性を見出せないのですが、何か見落としてい
る点などがあるでしょうか?

# どうしてこんな仕様になっているのかご存知の方、いらっしゃいます?

--
Yasuo Ohgaki