The key to optimization lies in this. If you only need the maximum value and not the complete mapping result, the logic can be executed in a single loop:
<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>];
<p></span>$maxPrice = null;<br>
foreach ($prices as $p) {<br>
$converted = $p / 100;<br>
if ($maxPrice === null || $converted > $maxPrice) {<br>
$maxPrice = $converted;<br>
}<br>
}</p>
<p>echo $maxPrice; // Output 32<br>
</span>
This approach avoids creating a new array with array_map, saving memory and improving performance in large data scenarios.
If you want to maintain a functional style while reducing memory usage, consider using generators:
<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>;
}
}
<p></span>$prices = [1999, 2500, 3200, 1800];</p>
<p>$maxPrice = max(iterator_to_array(convertPrices($prices)));</p>
<p>echo $maxPrice; // Output 32<br>
</span>
Although iterator_to_array is used here, in more complex streaming scenarios, generators prevent loading large datasets into memory at once, offering better scalability.
Related Tags:
array_map