PHP開発中、処理アレイは非常に一般的なタスクであり、適切な関数または方法を選択すると、コードの読みやすさを改善するだけでなく、プログラムのパフォーマンスを大幅に改善できます。この記事では、Array_diff_ukey()およびforeachループを使用して、アレイを処理するときにパフォーマンスの違いを比較し、実際の開発でそれらを比較検討して使用する方法を探ります。
array_diff_ukey()は、2つ以上の配列のキー名を比較し、ユーザー定義のコールバック関数を介してそれらを比較するためにPHPによって提供される関数であり、他の配列ではなく、最初の配列にすべてのキーを含む配列を返します。
構文は次のとおりです。
array array_diff_ukey(array $array1, array $array2, callable $key_compare_func)
例:
function key_compare($a, $b) {
return strcmp($a, $b);
}
$array1 = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$array2 = ["b" => "blueberry", "d" => "date"];
$result = array_diff_ukey($array1, $array2, "key_compare");
print_r($result);
出力:
Array
(
[a] => apple
[c] => cherry
)
また、 foreachループを使用して、同様のロジックを実装することもできます。
$array1 = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$array2 = ["b" => "blueberry", "d" => "date"];
$result = [];
foreach ($array1 as $key => $value) {
if (!array_key_exists($key, $array2)) {
$result[$key] = $value;
}
}
print_r($result);
出力は同じです:
Array
(
[a] => apple
[c] => cherry
)
それでは、大きな配列を扱うときの両方のパフォーマンスを見てみましょう。
function key_compare($a, $b) {
return strcmp($a, $b);
}
// 大きな配列を構築します
$array1 = [];
$array2 = [];
for ($i = 0; $i < 10000; $i++) {
$array1["key$i"] = "value$i";
if ($i % 2 == 0) {
$array2["key$i"] = "value_other$i";
}
}
// テスト array_diff_ukey()
$start = microtime(true);
$result1 = array_diff_ukey($array1, $array2, "key_compare");
$time1 = microtime(true) - $start;
// テスト foreach
$start = microtime(true);
$result2 = [];
foreach ($array1 as $key => $value) {
if (!array_key_exists($key, $array2)) {
$result2[$key] = $value;
}
}
$time2 = microtime(true) - $start;
echo "array_diff_ukey(): {$time1} 2番\n";
echo "foreach: {$time2} 2番\n";
Array_diff_ukey()は、特にコールバック機能自体がより複雑な場合、キー比較のためにコールバック関数を内部的に使用するため、パフォーマンスがわずかに遅くなる場合があります。
特にロジックが単純な場合は、機能が単純な場合は、通常、パフォーマンスが向上します。これは、関数呼び出しのオーバーヘッドを回避するためです。
もちろん、実際のパフォーマンスは、配列サイズ、サーバーハードウェア、PHPバージョンなどの要因によって異なります。パフォーマンスに敏感なシナリオで実際の測定を実行することをお勧めします。
シーン | 推奨方法 | 理由 |
---|---|---|
パフォーマンスファースト、シンプルなロジック | foreach | より直感的で、関数なしのオーバーヘッド |
簡潔なコード、読みやすさが推奨されます | array_diff_ukey() | 組み込み関数は、意図をより明確に表現します |
カスタマイズされた複雑な比較ロジック | array_diff_ukey() | カスタムキー比較ロジックをサポートします |
array_diff_ukey()またはマニュアルのforeachループを使用するかどうかにかかわらず、最も重要なことは、特定のビジネスシナリオに基づいて選択を行うことです。高性能APIまたはWebサービスを開発している場合( https://m66.net/api/v1/dataなど)、 foreachループを使用すると、多くの場合、ロジックとパフォーマンスをより適切に制御できます。保守性と表現力に重点を置くいくつかのビジネスロジックでは、PHPが提供する組み込み関数を選択する方が良いかもしれません。
この記事が、両方の利点と短所をよりよく理解し、将来のPHPプロジェクトでより合理的な決定を下すのに役立つことを願っています。