ホームページ >バックエンド開発 >PHPチュートリアル >2 つのフラットなインデックス付き配列を交互に効率的にマージするにはどうすればよいですか?

2 つのフラットなインデックス付き配列を交互に効率的にマージするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-03 10:40:10687ブラウズ

How Can I Efficiently Merge Two Flat Indexed Arrays Alternately?

フラットなインデックス付き配列を交互にマージ

2 つの配列を交互にマージし、値を連結するのではなく 1 つずつ結果にプッシュします。これはデータの処理と操作における一般的な要件です。この場合、2 つのフラットなインデックス付き配列 $a1 と $a2 があり、それらを新しい配列 $newArray にマージして、値が次のようにインターリーブされるようにしたいと考えています: [0, 3, 1, 4, 2] 、5].

提案されているように手動ループを使用してこれを達成することは可能ですが、パフォーマンス上の利点を提供する、より効率的なネイティブ アプローチがあります。次のコードは、事前計算されたアプローチを示しています。

$count = count($a1);
for ($i = 0; $i < $count; $i++) {
    $newArray[] = $a1[$i];
    $newArray[] = $a2[$i];
}

このコードでは、最初に $a1 内の要素の数を決定します ($a1 と $a2 が同じサイズであると仮定します)。次に、ループを使用して要素を反復し、それらを $newArray に交互に追加します。次に示すように、

パフォーマンス ベンチマークにより、このアプローチの効率性が確認されます。

$a1 = array(0, 1, 2);
$a2 = array(3, 4, 5);

$start = microtime(TRUE);

for($t = 0; $t < 100000; $t++){
    $newArray = array();
    $count = count($a1);
    for ($i = 0; $i < $count; $i++){
        $newArray[] = $a1[$i];
        $newArray[] = $a2[$i];
    }
}
echo round(microtime(TRUE) - $start, 2); # 0.6

比較各反復で配列サイズを再計算するアプローチに比べて、この事前計算されたアプローチはかなりのパフォーマンスを提供します。改善:

$a1 = array(0, 1, 2);
$a2 = array(3, 4, 5);

$start = microtime(TRUE);

for($t = 0; $t < 100000; $t++){
    $newArray = array();
    for ($i = 0; $i < count($a1); $i++){
        $newArray[] = $a1[$i];
        $newArray[] = $a2[$i];
    }
}
echo round(microtime(TRUE) - $start, 2); # 0.85

ベンチマークはパフォーマンスのスナップショットを提供しますが、特定のパフォーマンス特性は特定のデータや環境によって異なる可能性があることに注意することが重要です。それにもかかわらず、この事前計算されたアプローチは、フラットなインデックス付き配列を交互に効率的にマージするための強固な基盤を提供します。

以上が2 つのフラットなインデックス付き配列を交互に効率的にマージするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。