ホームページ  >  記事  >  バックエンド開発  >  PHP配列交差判定・最適化プログラムコード_PHPチュートリアル

PHP配列交差判定・最適化プログラムコード_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:03:44806ブラウズ

昨日は、生成された複数の配列の交差を判定する、つまり、これらの配列に交差があるかどうかを判定する必要がある関数を作成しました。今回は、必要な友達ができる PHP 配列の交差判定プログラムのコード例を紹介します。それを参照してください。 ​

2 つの配列が交差するかどうかを判断する必要があります。私が最初に感じたのは、確かにこの関数があるはずだということでした。

配列 array_intersect(配列 配列1,配列 配列2[,配列N…])

N 個の配列の交差要素を返します。連想配列の場合は、array_intersect_assoc() を使用できます。

PHPの場合は以下の通りです:

配列の交差

array_intersect() array_intersect() 関数は、最初の配列に出現し、他のすべての入力配列に出現する値のみで構成されるキー保存配列を返します。その形式は次のとおりです:

コードは次のとおりです私のアプリケーションは次のとおりです:
コードをコピー

$fruit1 = array("アップル","バナナ","オレンジ"); $fruit2 = array("梨","リンゴ","ブドウ");
$fruit3 = array("スイカ","オレンジ","リンゴ");
$intersection = array_intersect($fruit1, $fruit2, $fruit3);
print_r($intersection);
// 出力配列 ( [0] => Apple )
?>

コードは次のとおりですif($user->role != 1){連想配列の交差
コードをコピー
$count = count($projects);

for($i=0;$i If(!array_intersect(explode(',', $projects[$i]['role']),explore(',', $projects[$i]['next_approve_role']))){
に 続行;
}
}
}


array_intersect_assoc()

コードは次のとおりですコードをコピー$fruit1 = array("red"=>"Apple"," yellow"=>"バナナ","orange"=>"オレンジ");

配列交差の最適化

各パラメーターには約 1,000 個の製品 ID (int) が含まれると想定し、これを前提としてデータをシミュレートおよび生成します。

$fruit2 = array("黄色"=>"梨","赤"=>"リンゴ","紫"=>"ブドウ");

$fruit3 = array("green"=>"スイカ","orange"=>"オレンジ","re​​d"=>"リンゴ"); $intersection = array_intersect_assoc($fruit1, $fruit2, $fruit3);
print_r($intersection);

//出力
// 配列 ( [赤] => Apple )

?>



コードは次のとおりですコードをコピー

$rand = function() {

$result = array();

for ($i = 0; $i $result[] = mt_rand(1, 10000);
}
$result を返す;

};

$param_a = $rand();

$param_b = $rand();

?>

注: テスト データ セットが小さすぎる場合、結論に一貫性がなくなる可能性があります。

まず、PHP の組み込みメソッド array_intersect によって達成されるパフォーマンスを見てみましょう:

コードは次のとおりですコードをコピー

$time = マイクロタイム(true);

$result = array_intersect($param_a, $param_b);

$time = マイクロタイム(true) - $time;

echo "array_intersect: {$time}n";

?>

最適化する前に、array_intersect のいくつかの特別な機能を見てみましょう:

コードは次のとおりですコードをコピー

array_intersect($param_a, $param_b): 1, 2, 2
array_intersect($param_b, $param_a): 1, 2
つまり、最初の配列パラメータに重複要素がある場合、array_intersect は条件を満たすすべての重複要素を返します。 array_intersect を書き換えるときは、これらの関数と互換性があることが最善です。

カスタム メソッド int_array_intersect:

を通じて達成されるパフォーマンスを見てみましょう。

$param_a = 配列(1, 2, 2);

$param_b = 配列(1, 2, 3);

var_dump(

Array_intersect($param_a, $param_b),
Array_intersect($param_b, $param_a)
);

?>

コードは次のとおりです コードをコピー

関数 int_array_intersect()
{
If (func_num_args() trigger_error('パラメータエラー', E_USER_ERROR);
}

$args = func_get_args();

foreach ($args AS $arg) {
if (!is_array($arg)) {
trigger_error('パラメータエラー', E_USER_ERROR);
}
}

$intersect = function($a, $b) {
$result = array();

$length_a = count($a);
$length_b = count($b);

for ($i = 0, $j = 0; $i If($a[$i] < $b[$j] && ++$i) {
続行;
}

if($a[$i] > $b[$j] && ++$j) {
続行;
}

$result[] = $a[$i];

if (isset($a[$next = $i + 1]) && $a[$next] != $a[$i]) {
++$j;
}
++$i;
}

$result を返す;
};

$result = array_shift($args);
並べ替え($result);

foreach ($args as $arg) {
sort($arg);
$result = $intersect($result, $arg);
}

$result を返す;
}

$time = マイクロタイム(true);

$result = int_array_intersect($param_a, $param_b);

$time = マイクロタイム(true) - $time;

echo "int_array_intersect: {$time}n";

?>

直感的には、組み込み関数の方がカスタム関数よりも速いと思いますが、この場合、結果はまったく逆になります。

array_intersect: 0.023918151855469
int_array_intersect: 0.0026049613952637


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445278.html技術記事昨日は、生成された複数の配列の交差を判定する、つまり、これらの配列に交差があるかどうかを判定する必要がある関数がありました。今回は、PHP 配列の交差を判定するプロセスを紹介します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。