En PHP, l'optimisation des performances a toujours été au centre des développeurs, en particulier lors du traitement de grandes quantités de données, le choix de la bonne méthode de traitement des données est particulièrement important. array_change_key_case () et foreach traversernt couramment des méthodes de fonctionnement du tableau en PHP et peuvent montrer différentes différences de performances dans différents scénarios. Alors, comment évaluer les différences d'efficacité entre les deux? Dans cet article, nous discuterons de la façon d'utiliser SPL_OBJECT_ID () pour nous aider à analyser l'efficacité des deux.
array_change_key_case () est une fonction intégrée dans PHP qui convertit tous les noms de clés d'un tableau en majuscules ou en minuscules. Cette fonction accepte deux paramètres:
<span><span><span class="hljs-title function_ invoke__">array_change_key_case</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$case</span></span><span> = CASE_LOWER): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
$ Array : un tableau de noms de clés à convertir.
$ cas : spécifie la méthode de conversion. Case_Lower convertira le nom de la clé en minuscules et Case_upper convertira le nom de la clé en majuscule.
Cette fonction renvoie un nouveau tableau et le tableau d'origine n'est pas modifié.
Forach est une structure de traversée de réseau couramment utilisée dans PHP. Il traverse chaque élément du tableau par ordre du pointeur. L'utilisation de base est la suivante:
<span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-comment">// Opérez sur des éléments de tableau</span></span><span>
}
</span></span>
ForEach est l'une des méthodes de traversée de tableau les plus performantes en PHP et est souvent utilisée pour traiter de grandes quantités de données.
Pour comparer les différences de performances entre Array_Change_Key_Case () et ForEach Traversal, nous pouvons utiliser SPL_OBJECT_ID () pour observer les opérations sur la mémoire des deux. Dans PHP, SPL_OBJECT_ID () est utilisé pour renvoyer un identifiant unique pour un objet. Nous pouvons estimer les changements de mémoire en comparant les ID d'objet avant et après l'opération, évaluant ainsi l'efficacité.
array_change_key_case () et foreach fonctionnent sur des objets de tableau lors du traitement des tableaux, en particulier lorsque le tableau est grand, il peut impliquer davantage d'opérations d'allocation et de copie de mémoire. Pour évaluer l'efficacité de ces deux méthodes, nous pouvons utiliser spl_object_id () avant et après l'exécution pour voir les changements dans l'objet.
L'exemple de code est le suivant:
<span><span><span class="hljs-comment">// Tester les données</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'One'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'Two'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'Three'</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'Four'</span></span><span> => </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-comment">// utiliser spl_object_id() Vérifiez l'objet de tableau avant l'opération ID</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Before array_change_key_case() ID: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">spl_object_id</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>) . PHP_EOL;
</span><span><span class="hljs-variable">$newArray</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_change_key_case</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, CASE_LOWER);
</span><span><span class="hljs-comment">// utiliser spl_object_id() Vérifiez l'objet de tableau après l'opération ID</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"After array_change_key_case() ID: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">spl_object_id</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>) . PHP_EOL;
</span><span><span class="hljs-keyword">echo</span></span><span> PHP_EOL;
</span><span><span class="hljs-comment">// utiliser foreach Itérer dans le tableau</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Before foreach() ID: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">spl_object_id</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>) . PHP_EOL;
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-comment">// Opération de traversée</span></span><span>
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"After foreach() ID: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">spl_object_id</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>) . PHP_EOL;
</span></span>
Comme on peut le voir à partir du code ci-dessus, array_change_key_case () peut créer un nouvel objet Array au lieu de modifier l'objet Array d'origine, donc spl_object_id () sera différent avant et après l'opération. Cela indique que Array_Change_Key_Case () copiera le tableau d'origine, résultant en une surcharge de mémoire supplémentaire.
Relativement parlant, ForEach Traversal fonctionne simplement sur chaque élément du tableau et ne crée pas un nouvel objet de tableau, donc son ID d'objet est généralement inchangé et a une petite surcharge de mémoire.
Pour effectuer une évaluation plus complète de l'efficacité des deux, MicroTime (vrai) peut être utilisé pour mesurer le temps d'exécution. Voici un exemple de comparaison de performances simples:
<span><span><span class="hljs-comment">// Tester les données</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">100000</span></span><span>);
</span><span><span class="hljs-comment">// Mesures array_change_key_case() performance</span></span><span>
</span><span><span class="hljs-variable">$start</span></span><span> = </span><span><span class="hljs-title function_ invoke__">microtime</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-variable">$newArray</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_change_key_case</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, CASE_UPPER);
</span><span><span class="hljs-variable">$end</span></span><span> = </span><span><span class="hljs-title function_ invoke__">microtime</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"array_change_key_case() Temps d'exécution: "</span></span><span> . (</span><span><span class="hljs-variable">$end</span></span><span> - </span><span><span class="hljs-variable">$start</span></span><span>) . </span><span><span class="hljs-string">" Deuxième"</span></span><span> . PHP_EOL;
</span><span><span class="hljs-comment">// Mesures foreach 遍历performance</span></span><span>
</span><span><span class="hljs-variable">$start</span></span><span> = </span><span><span class="hljs-title function_ invoke__">microtime</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-comment">// Opération de traversée</span></span><span>
}
</span><span><span class="hljs-variable">$end</span></span><span> = </span><span><span class="hljs-title function_ invoke__">microtime</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"foreach() Temps d'exécution: "</span></span><span> . (</span><span><span class="hljs-variable">$end</span></span><span> - </span><span><span class="hljs-variable">$start</span></span><span>) . </span><span><span class="hljs-string">" Deuxième"</span></span><span> . PHP_EOL;
</span></span>
En observant les modifications de la mémoire par SPL_OBJECT_ID () et en combinant le test du temps d'exécution, nous pouvons tirer les conclusions suivantes:
array_change_key_case () créera un nouveau tableau, entraînant une consommation élevée de mémoire, en particulier lors du traitement des mégadonnées, les performances seront affectées dans une certaine mesure.
ForEach Traversal fonctionne simplement sur chaque élément du tableau, ne crée pas de nouveaux objets de tableau, a une petite surcharge de mémoire et est généralement plus rapide à exécuter.
Par conséquent, ForEach est souvent plus efficace que Array_Change_Key_Case () lors du traitement des mégadonnées. Si vous devez modifier le cas des noms de clés du tableau, il est recommandé d'éviter d'utiliser array_change_key_case () dans des scénarios avec des exigences de performance élevées, mais de le traiter directement en traversant.