PHPには、配列を処理する方法は多くあります。この方法では、 array_columnとforeachループは、配列内の特定の値またはオブジェクトプロパティを抽出するための2つの一般的な方法です。これらの2つの方法は、同様の機能を実装するためによく使用されますが、パフォーマンスが異なります。それで、 array_columnはforeachよりも効率的ですか?この記事では、パフォーマンスの違いと適用可能なシナリオを詳細に分析します。
Array_Column関数は、PHPに組み込まれた非常に便利な関数であり、オブジェクトの配列からオブジェクトの特定のプロパティを抽出するのに適した、多次元配列から指定された列の値を抽出します。たとえば、次のオブジェクトの配列があるとします。
$objects = [
(object) ['id' => 1, 'name' => 'Alice'],
(object) ['id' => 2, 'name' => 'Bob'],
(object) ['id' => 3, 'name' => 'Charlie']
];
// 使用 array_column すべてを抽出します 'name' 財産
$names = array_column($objects, 'name');
print_r($names);
出力は次のとおりです。
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
array_columnは2つのパラメーターを受信します。1つ目は配列、2つ目は抽出する必要があるフィールド名です。その内部実装は、特に大きな配列を処理する場合に非常に効率的であり、列データをより迅速に抽出できるようにします。
別の一般的な方法は、 foreachループを使用してアレイを手動で反復し、各オブジェクトのプロパティ値を抽出することです。例えば:
$objects = [
(object) ['id' => 1, 'name' => 'Alice'],
(object) ['id' => 2, 'name' => 'Bob'],
(object) ['id' => 3, 'name' => 'Charlie']
];
$names = [];
foreach ($objects as $object) {
$names[] = $object->name;
}
print_r($names);
出力の結果は、 array_columnと同じです。
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
foreachループには、各オブジェクトの属性値を抽出するための手動ロジックが必要です。コードは通常長いですが、柔軟性も良好です。
Array_Columnは、PHPで内部的に実装され、Cで記述されている関数であるため、通常、大規模なアレイを扱うときよりも効率的です。これは、 array_columnが特定のシナリオに最適化されているためです。下部の配列に指定された列を直接抽出し、PHPコードレベルでループ制御および配列割り当て操作を回避します。
対照的に、 foreachループでは、アレイを手動で移動し、1つずつ処理する必要があります。この方法は柔軟ですが、各ループには、配列操作、条件付き判断など、複数のPHP操作が必要です。したがって、非常に大きな配列を扱う場合、 foreachループはarray_columnほど機能しない場合があります。
10000オブジェクトの配列があるとします。Array_Columnを使用して、オブジェクトの名前属性を抽出して実行時間をテストします。
// コンテナを作成します 10000 オブジェクトの配列
$objects = [];
for ($i = 0; $i < 10000; $i++) {
$objects[] = (object) ['id' => $i, 'name' => 'Name ' . $i];
}
// テスト array_column パフォーマンス
$startTime = microtime(true);
$names = array_column($objects, 'name');
$endTime = microtime(true);
echo "array_column execution time: " . ($endTime - $startTime) . " seconds\n";
// テスト foreach 循环パフォーマンス
$startTime = microtime(true);
$names = [];
foreach ($objects as $object) {
$names[] = $object->name;
}
$endTime = microtime(true);
echo "foreach execution time: " . ($endTime - $startTime) . " seconds\n";
テストでは、 Array_Columnは通常、特に配列が大きい場合は、通常、 Foreachよりも短く実行されます。
PHPでは、特に大規模な配列から特定の列を抽出する必要がある場合、 Array_Column関数は通常、 Foreachループよりも効率的です。 array_columnは、PHP内部最適化を利用してオーバーヘッドが低いデータをすばやく抽出しますが、 foreachループにはより多くのPHP操作が必要であるため、パフォーマンスが低下します。
ただし、特にアレイを横断しながら追加の操作を実行する必要がある場合、より多くのカスタマイズロジックが必要ないくつかのシナリオでは、 foreachループにはまだいくつかの利点があります。実際の開発では、単に列を配列に抽出する場合は、最初にarray_columnを使用することをお勧めします。
この記事が、これら2つの方法のパフォーマンスの違いをよりよく理解し、より適切な選択をするのに役立つことを願っています。