La clé de l'optimisation réside. Si nous voulons simplement obtenir la valeur maximale et n'avons pas besoin d'un résultat de mappage complet, nous pouvons écrire la logique dans une boucle à compléter:
<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">// Sortir 32</span></span><span>
</span></span>
Cela évite le processus de création de nouveaux tableaux de création de nouveaux tableaux, enregistre la mémoire et fonctionne mieux dans les scénarios de Big Data.
Si le code doit conserver le style fonctionnel et souhaite réduire la consommation de mémoire, vous pouvez considérer le générateur:
<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">// Sortir 32</span></span><span>
</span></span>
Bien que iterator_to_array soit utilisé ici, dans des scénarios de streaming plus complexes, le générateur peut éviter le chargement de données à grande échelle dans la mémoire en même temps, ce qui a une meilleure évolutivité.
Étiquettes associées:
array_map