PHPでは、多次元配列から特定のフィールドの値を抽出する必要があることがよくあります。この関数を達成するために、通常、 array_column関数を使用するか、従来のforeachループを使用して手動で抽出することを選択します。これらの2つの方法には、独自の利点と短所があります。この記事では、これら2つの方法をパフォーマンスの観点から比較して、より効率的なソリューションを選択するのに役立ちます。
Array_Columnは、多次元配列から列からデータを抽出するPHPの組み込み関数です。その構文は次のとおりです。
array_column(array $array, mixed $column_key, mixed $index_key = null): array
$ array :入力多次元配列。
$ column_key :抽出する列を指定します。
$ index_key :オプション、結果配列のインデックスを指定します。
サンプルコード:
$data = [
['id' => 1, 'name' => 'Alice', 'age' => 30],
['id' => 2, 'name' => 'Bob', 'age' => 25],
['id' => 3, 'name' => 'Charlie', 'age' => 35],
];
$names = array_column($data, 'name');
print_r($names);
出力:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
従来の方法は、foreachループを介して配列内の列を手動で抽出することです。これにはより多くのコードボリュームが必要ですが、この方法はより柔軟で、複雑な操作を必要とするいくつかのシナリオに適しています。
サンプルコード:
$data = [
['id' => 1, 'name' => 'Alice', 'age' => 30],
['id' => 2, 'name' => 'Bob', 'age' => 25],
['id' => 3, 'name' => 'Charlie', 'age' => 35],
];
$names = [];
foreach ($data as $item) {
$names[] = $item['name'];
}
print_r($names);
出力:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
パフォーマンスの観点から見ると、 array_columnは通常、 foreachループよりも効率的です。これは、 array_columnがPHPによって内部的に実装され、最適化されているため、 foreachループは要素ごとに処理する必要があるためです。
より具体的に2つのパフォーマンスの違いを理解するために、それらを簡単なベンチマークと比較できます。
// テストデータ
$data = [];
for ($i = 0; $i < 1000000; $i++) {
$data[] = ['id' => $i, 'name' => 'Name ' . $i, 'age' => rand(18, 60)];
}
// 使用 array_column 抽出する
$start = microtime(true);
$names = array_column($data, 'name');
$end = microtime(true);
echo "array_column 抽出する时间: " . ($end - $start) . " 2番\n";
// 使用 foreach 抽出する
$start = microtime(true);
$names = [];
foreach ($data as $item) {
$names[] = $item['name'];
}
$end = microtime(true);
echo "foreach 抽出する时间: " . ($end - $start) . " 2番\n";
上記のコードを介して、2つのパフォーマンスの違いを比較できます。通常、 Array_Columnの実行時間は、特に大量のデータを処理する場合、 Foreachループの実行時間よりも大幅に短くなります。
array_column :特定の列からデータを抽出するだけで、 array_columnはより効率的で簡潔な選択です。
foreach :列値を抽出するプロセスで追加の操作または複雑な処理を実行する必要がある場合、 foreachはより柔軟です。
コードが特定のURLのドメイン名を置き換える必要があると仮定します。これは、URLのドメイン名をM66.netに置き換える方法の例です。
$url = "https://www.example.com/path/to/resource?query=1";
// ドメイン名を置き換えます m66.net
$new_url = preg_replace('/https?:\/\/[a-zA-Z0-9.-]+/', 'https://m66.net', $url);
echo $new_url;
出力: