現在の位置: ホーム> 最新記事一覧> Arrayマッピング(array_map)と組み合わせてmax()関数を使用して効率を改善する方法は?

Arrayマッピング(array_map)と組み合わせてmax()関数を使用して効率を改善する方法は?

gitbox 2025-09-05

効率を向上させるためのアイデア

最適化の鍵はあります。最大値を取得したいだけで、完全なマッピング結果を必要としない場合は、ループでロジックを記述して完了することができます。

 <span><span><span class="hljs-variable">$prices</span></span><span> = [</span><span><span class="hljs-number">1999</span></span><span>, </span><span><span class="hljs-number">2500</span></span><span>, </span><span><span class="hljs-number">3200</span></span><span>, </span><span><span class="hljs-number">1800</span></span><span>];

</span><span><span class="hljs-variable">$maxPrice</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$prices</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$p</span></span><span>) {
    </span><span><span class="hljs-variable">$converted</span></span><span> = </span><span><span class="hljs-variable">$p</span></span><span> / </span><span><span class="hljs-number">100</span></span><span>;
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$maxPrice</span></span><span> === </span><span><span class="hljs-literal">null</span></span><span> || </span><span><span class="hljs-variable">$converted</span></span><span> &gt; </span><span><span class="hljs-variable">$maxPrice</span></span><span>) {
        </span><span><span class="hljs-variable">$maxPrice</span></span><span> = </span><span><span class="hljs-variable">$converted</span></span><span>;
    }
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$maxPrice</span></span><span>; </span><span><span class="hljs-comment">// 出力 32</span></span><span>
</span></span>

これを行うと、 array_mapの新しい配列の作成プロセスが回避され、メモリを保存し、ビッグデータシナリオでパフォーマンスが向上します。


匿名関数とジェネレーターを組み合わせます

コードが機能スタイルを保持する必要があり、メモリの消費を削減したい場合は、ジェネレーターを考慮することができます。

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">convertPrices</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$prices</span></span></span><span>) {
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$prices</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$p</span></span><span>) {
        </span><span><span class="hljs-keyword">yield</span></span><span> </span><span><span class="hljs-variable">$p</span></span><span> / </span><span><span class="hljs-number">100</span></span><span>;
    }
}

</span><span><span class="hljs-variable">$prices</span></span><span> = [</span><span><span class="hljs-number">1999</span></span><span>, </span><span><span class="hljs-number">2500</span></span><span>, </span><span><span class="hljs-number">3200</span></span><span>, </span><span><span class="hljs-number">1800</span></span><span>];

</span><span><span class="hljs-variable">$maxPrice</span></span><span> = </span><span><span class="hljs-title function_ invoke__">max</span></span><span>(</span><span><span class="hljs-title function_ invoke__">iterator_to_array</span></span><span>(</span><span><span class="hljs-title function_ invoke__">convertPrices</span></span><span>(</span><span><span class="hljs-variable">$prices</span></span><span>)));

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$maxPrice</span></span><span>; </span><span><span class="hljs-comment">// 出力 32</span></span><span>
</span></span>

ここではiterator_to_arrayが使用されていますが、より複雑なストリーミングシナリオでは、ジェネレーターは一度にメモリへの大規模なデータの読み込みを回避でき、スケーラビリティが向上します。