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

2 つのフラット配列を交互に効率的にマージするにはどうすればよいでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-19 16:47:16207ブラウズ

How Can We Efficiently Merge Two Flat Arrays Alternately?

フラット配列を交互にマージする

同じサイズの 2 つのフラット配列が与えられた場合、それぞれの要素内の要素の順序を維持しながら、それらを交互にマージしようとします。配列。目的の出力は次のようになります。

array(0, 3, 1, 4, 2, 5);

次のような総当りアプローチでもタスクは完了します。

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

この操作を何千回も実行する場合、効率が非常に重要になります。

ネイティブ ソリューション

提案されたネイティブ ソリューションには、配列を反復処理し、それらの要素を新しい配列に交互に追加する調整されたループ:

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

この手法は、以下のベンチマーク テストで実証されているように、特に何度も繰り返す場合に、より効率的であることがわかります:

$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[] = $b1[$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

したがって、配列サイズを事前にカウントすると、パフォーマンスが約 25% 向上し、大規模なシステムに最適なソリューションになります。操作。

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

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