最適化の鍵はあります。最大値を取得したいだけで、完全なマッピング結果を必要としない場合は、ループでロジックを記述して完了することができます。
<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> > </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が使用されていますが、より複雑なストリーミングシナリオでは、ジェネレーターは一度にメモリへの大規模なデータの読み込みを回避でき、スケーラビリティが向上します。
関連タグ:
array_map