ただし、携帯電話には多くのパラメータがあり、携帯電話ごとにパラメータが大きく異なるため、パラメータ テーブルの構造は通常、水平テーブル (1 パラメータが 1 列) ではなく、垂直テーブル (1 パラメータが 1 行) になります。 、結果を取得するために複数のパラメータが使用されます。通常は、それぞれのパラメータを取得して結果を取得し、共通部分を取得します。
各パラメーターに約 1,000 個の一意の結果 (id int) が含まれると仮定し、これを前提としてデータの生成をシミュレートします:
カスタム メソッド intersect によって達成されるパフォーマンスを見てみましょう:
コードは次のとおりです。次のように:
function intersect() {
if (func_num_args () < 2) {
trigger_error('param error', E_USER_ERROR)
} $args = func_get_args(); ($args AS $arg) { if (!is_array($arg)) { trigger_error('param error', E_USER_ERROR) }
}
$intersect = function($a, $b) {
$result = 配列();
$length_a = カウント($a);
$length_b = カウント($b); $i < $length_a && $j < $ length_b; null) {
if($a[$i] < $b[$ j]) {
$i++; else if($a[$i] > $b[$j]) {
$j++;
$result[] = $a[$i];
$j++;
$result($args);
sort($result);
foreach ($arg として $arg);
$result($result, $arg);
return $result; = microtime(true);
$result = intersect($param_a, $param_b);
$time = microtime(true) - $time;
;直感的には、組み込み関数の方がカスタム関数よりも速いと思いますが、この場合の結果は反対です:
array_intersect: 0.023918151855469
intersect: 0.0026049613952637
array_intersect と intersect は完全に同等ではないことを皆さんに思い出していただく必要があります。例は次のとおりです:
コードをコピーします
コードは次のとおりです:
$param_a = array(1, 2, 2);
var_dump(
array_intersect($param_a, $param_b),
intersect($param_a, $param_b)
);
array_intersect: 1, 2, 2
intersect: 1, 2
つまり、最初の配列パラメーターに重複要素がある場合、array_intersect は 1 つだけを返すのではなく、条件を満たすすべての重複要素を返します。興味があれば、読者はパラメーターの順序を変更して結果を確認できます。
もう一度話しましょう。最初に intersect メソッドを書いたとき、おそらく次のようになりました。
コードをコピーします
コードは次のとおりです:
function intersect() { if (func_num_args() < ; 2) { trigger_error('param error', E_USER_ERROR); }
$args = func_get_args() {
if (!is_array($arg) )) {
trigger_error(' param error', E_USER_ERROR);
}
}
$result = array();
$data = array_count_values(
call_user_func_array('array_merge', $args)
); AS $value => $ count) {
if ($count > 1) {
$result[] = $value;
}
return $result;
コードはより簡潔ですが、array_merge を使用するため、配列内の要素が非常に多い場合、逆に占有されるメモリが比較的大きくなります。であれば、この方法も実現可能です。 (出典: Huo Ding のメモ)
http://www.bkjia.com/PHPjc/323093.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/323093.html技術記事ただし、携帯電話には多くのパラメータがあり、携帯電話ごとにパラメータが大きく異なるため、パラメータ テーブルの構造は通常、水平テーブル (1 パラメータが 1 列) ではなく垂直テーブル (1 パラメータが 1 行) になります...