現在の位置: ホーム> 最新記事一覧> spl_object_idは、array_change_key_case()の効率を評価するのに役立ちますか?

spl_object_idは、array_change_key_case()の効率を評価するのに役立ちますか?

M66 2025-07-07

PHPでは、特に大量のデータを処理する場合、パフォーマンスの最適化は常に開発者の焦点でした。適切なデータ処理方法を選択することは特に重要です。 array_change_key_case()およびforeachトラバーサルは、一般的にPHPで使用される配列操作方法であり、異なるシナリオで異なるパフォーマンスの違いを示す場合があります。それでは、2つの効率の違いを評価する方法は?この記事では、 spl_object_id()を使用して、両方の効率を分析する方法について説明します。

1。array_change_key_case ()およびforeachの基本的な紹介

array_change_key_case()

array_change_key_case()は、Arrayのすべてのキー名を大文字または小文字に変換するPHPの組み込み関数です。この関数は、2つのパラメーターを受け入れます。

 <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>
  • $配列:変換されるキー名の配列。

  • $ case :変換方法を指定します。 case_lowerはキー名を小文字に変換し、 case_upperはキー名を大文字に変換します。

この関数は新しい配列を返し、元の配列は変更されていません。

トラバーサルのために

Foreachは、PHPで一般的に使用される配列トラバーサル構造です。配列の各要素をポインター順序によって横断します。基本的な使用法は次のとおりです。

 <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> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-comment">// 配列要素を操作します</span></span><span>
}
</span></span>

Foreachは、PHPで最もパフォーマンスの高い配列トラバーサル方法の1つであり、多くの場合、大量のデータを処理するために使用されます。

2。パフォーマンスの違いを評価する方法は?

array_change_key_case()foreach traversalのパフォーマンスの違いを比較するために、 spl_object_id()を使用して、2つのメモリの操作を観察できます。 PHPでは、 spl_object_id()を使用して、オブジェクトの一意の識別子を返します。操作の前後にオブジェクトIDを比較して、効率を評価することにより、メモリの変更を推定できます。

spl_object_id()を使用してメモリの変更を評価する

array_change_key_case()およびforeachは、配列を処理するときに配列オブジェクトで動作します。特に配列が大きい場合は、より多くのメモリ割り当てとコピー操作が含まれる場合があります。これら2つの方法の効率を評価するために、実行前後のSPL_OBJECT_ID()を使用して、オブジェクトの変更を確認できます。

サンプルコードは次のとおりです。

 <span><span><span class="hljs-comment">// テストデータ</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'One'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'Two'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'Three'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'Four'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>];

</span><span><span class="hljs-comment">// 使用 spl_object_id() 操作前に配列オブジェクトを確認してください 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">// 使用 spl_object_id() 操作後に配列オブジェクトを確認します 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">// 使用 foreach 配列を繰り返します</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> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-comment">// トラバーサル操作</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>

3。結果分析

上記のコードからわかるように、 array_change_key_case()は、元の配列オブジェクトを変更する代わりに新しい配列オブジェクトを作成する場合があるため、操作の前後にspl_object_id()は異なります。これは、 array_change_key_case()が元の配列をコピーして追加のメモリオーバーヘッドになることを示しています。

比較的言えば、 foreachトラバーサルは配列の各要素で動作するだけで、新しい配列オブジェクトを作成しないため、オブジェクトIDは通常変更されず、頭上の小さなメモリを持っています。

4。パフォーマンスの比較

両方の効率をより包括的に評価するために、マイクロタイム(真)を使用して実行時間を測定できます。簡単なパフォーマンスの比較例は次のとおりです。

 <span><span><span class="hljs-comment">// テストデータ</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">// 測定 array_change_key_case() パフォーマンス</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() 実行時間: "</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">" 2番"</span></span><span> . PHP_EOL;

</span><span><span class="hljs-comment">// 測定 foreach 遍历パフォーマンス</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> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-comment">// トラバーサル操作</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() 実行時間: "</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">" 2番"</span></span><span> . PHP_EOL;
</span></span>

5。結論

spl_object_id()によるメモリの変更を観察し、実行時間のテストを組み合わせることにより、次の結論を描くことができます。

  • array_change_key_case()は新しいアレイを作成し、特にビッグデータを処理する場合、パフォーマンスがある程度影響を受ける場合、メモリ消費量が高くなります。

  • Foreach Traversalは、配列のすべての要素で動作するだけで、新しい配列オブジェクトを作成せず、頭上のメモリが小さく、通常は実行が速くなります。

したがって、ビッグデータを処理する際には、多くの場合、 array_change_key_case()よりも効率的です。配列キー名のケースを変更する必要がある場合は、パフォーマンス要件を持つシナリオでarray_change_key_case()を使用しないようにすることをお勧めしますが、トラバーサルで直接対処します。