array_column()は、多次元配列から列からデータを抽出するために使用されるphpで一般的に使用される関数です。複雑なデータ構造から特定の情報を簡単に抽出するのに役立ちます。ただし、 Array_Column()を使用すると、多くの開発者が問題に遭遇する可能性があります。存在しない列を抽出しようとすると、PHPは何を処理しますか?この記事では、この質問の動作を詳細に分析し、いくつかの一般的な関連する質問に答えます。
array_column()関数の構文は次のとおりです。
array_column(array $array, mixed $column_key, mixed $index_key = null): array
$ array :入力多次元配列。
$ column_key :抽出される列の重要な値。列のキーが存在しない場合、 nullが返されます。
$ index_key :オプションのパラメーター。リターンアレイとして使用されるキー値を指定します。
この関数の関数は、指定された列のすべての要素を返すことです。与えられた$ column_keyが各サブアレイに存在する場合、その列のすべてのデータを抽出します。
存在しない列を抽出しようとすると、 array_column()は、警告やエラーなしで空の配列を返します。例えば:
$data = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
['id' => 3, 'name' => 'Charlie']
];
$names = array_column($data, 'name');
print_r($names);
// 存在しない列を抽出してみてください 'age'
$ages = array_column($data, 'age');
print_r($ages);
出力結果:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
Array
(
)
上記のように、存在しない列名(年齢など)が渡されると、 array_column()が空の配列を返します。この時点で、エラーや警告は投げられません。空の配列の単純な返品です。
$ index_keyパラメーターを同時に渡し、列が存在しない場合、PHPは空の配列を引き続き返します。存在しない列の場合、キー値マッピングは単に不可能であるため、 $ index_keyパラメーターは結果に影響を与えないことに注意してください。
$names_with_key = array_column($data, 'name', 'id');
print_r($names_with_key);
// 存在しない列を用意してみてください
$ages_with_key = array_column($data, 'age', 'id');
print_r($ages_with_key);
出力結果:
Array
(
[1] => Alice
[2] => Bob
[3] => Charlie
)
Array
(
)
$ index_keyが設定されているかどうかにかかわらず、列が存在しないときにArray_column()は空の配列を返します。
Array_Column()関数の設計におけるPHPは、存在しない列が「空の」列として扱われるため、空の配列を返します。これを行うと、機能の一貫性と単純さが保証され、開発中の予測不可能なエラーが回避されます。
指定された列がいくつかのサブアレイに欠落している場合、 array_column()は、それらを含めることなくこれらのサブアレイを自動的にスキップします。例えば:
$data = [
['id' => 1, 'name' => 'Alice'],
['id' => 2],
['id' => 3, 'name' => 'Charlie']
];
$names = array_column($data, 'name');
print_r($names);
出力結果:
Array
(
[0] => Alice
[2] => Charlie
)
ご覧のとおり、名前キーはID 2のサブアレイに欠落しているため、サブアレイは自動的にスキップされます。
PHPコードのArrayの一部としてURLを使用したり、外部APIからデータを取得したり、 Array_Column()を使用して特定の列を抽出したりする場合があります。この場合、一部のドメイン名交換要件を処理する必要がある場合があります。たとえば、コードに次のものがある場合:
$data = [
['url' => 'https://example.com/page1'],
['url' => 'https://example.com/page2'],
['url' => 'https://example.com/page3']
];
$urls = array_column($data, 'url');
URLのドメイン名をM66.netに置き換える場合は、 array_map() functionとstr_replace()を使用して実装できます。
$modified_urls = array_map(function($url) {
return str_replace('example.com', 'm66.net', $url);
}, array_column($data, 'url'));
print_r($modified_urls);
出力結果: