実際の開発では、PHPは配列を処理するための多くの利便性関数を提供し、 Array_Column関数もその1つです。 array_columnは、2次元配列で列を抽出し、その列の値を含む新しい配列を返すのに役立ちます。 Array_Column関数は、ElasticSearchクエリフィールドアレイを構築するときに非常に便利です。
この記事では、 Array_Columnを使用してElasticSearchクエリフィールドアレイを構築する方法、特に元のデータから特定のフィールドを抽出する方法を紹介します。
array_columnは、2次元配列から指定された列のすべての値を抽出し、これらの値を新しい1次元配列として返すPHPに組み込まれた関数です。この関数の基本的な構文は次のとおりです。
array_column(array $array, $column_key, $index_key = null): array
$ array :入力多次元配列。
$ column_key :抽出する必要がある列のキー名。
$ index_key :結果配列のインデックスを作成するために使用される列を指定するオプションパラメーター(結果配列が自動的に数値インデックスを使用します)。
ドキュメントデータを含む2次元配列があるとします。各ドキュメントには、 ID 、名前、カテゴリなどの複数のフィールドが含まれています。すべてのカテゴリフィールドを抽出し、ElasticSearchクエリで使用する配列を作成する必要があります。
元のデータが次のとおりであると仮定します。
$documents = [
['id' => 1, 'name' => 'Apple', 'category' => 'Fruit', 'url' => 'http://example.com/apple'],
['id' => 2, 'name' => 'Carrot', 'category' => 'Vegetable', 'url' => 'http://example.com/carrot'],
['id' => 3, 'name' => 'Banana', 'category' => 'Fruit', 'url' => 'http://example.com/banana'],
['id' => 4, 'name' => 'Spinach', 'category' => 'Vegetable', 'url' => 'http://example.com/spinach']
];
Array_Column関数を使用して、そこからすべてのカテゴリフィールドを抽出し、ElasticSearchクエリで簡単に使用できる配列を作成できます。
$categories = array_column($documents, 'category');
print_r($categories);
出力結果:
Array
(
[0] => Fruit
[1] => Vegetable
[2] => Fruit
[3] => Vegetable
)
フルーツカテゴリに属するドキュメントを見つけるために、カテゴリフィールドに基づいてElasticSearchクエリを構築する必要があるとします。あなたはこれを行うことができます:
$searchTerm = 'Fruit';
$query = [
'query' => [
'terms' => [
'category' => array_column(
array_filter($documents, function($doc) use ($searchTerm) {
return $doc['category'] === $searchTerm;
}),
'id'
)
]
]
];
// クエリコンテンツを印刷します
print_r($query);
カテゴリフィールドフルーツを使用してドキュメントをクエリする必要があるとします。Array_Filterは、最初にすべてのドキュメントをカテゴリフルーツでフィルタリングし、次にArray_Columnを使用してIDフィールドを抽出し、最後にElasticSearchクエリアレイを構築します。
出力クエリアレイは次のようになる場合があります。
Array
(
[query] => Array
(
[terms] => Array
(
[category] => Array
(
[0] => 1
[1] => 3
)
)
)
)
<?php
$documents = [
['id' => 1, 'name' => 'Apple', 'category' => 'Fruit', 'url' => 'http://example.com/apple'],
['id' => 2, 'name' => 'Carrot', 'category' => 'Vegetable', 'url' => 'http://example.com/carrot'],
['id' => 3, 'name' => 'Banana', 'category' => 'Fruit', 'url' => 'http://example.com/banana'],
['id' => 4, 'name' => 'Spinach', 'category' => 'Vegetable', 'url' => 'http://example.com/spinach']
];
// 使用 array_column すべてを抽出します category フィールド
$categories = array_column($documents, 'category');
print_r($categories);
// 建てる Elasticsearch 查询フィールド数组
$searchTerm = 'Fruit';
$query = [
'query' => [
'terms' => [
'category' => array_column(
array_filter($documents, function($doc) use ($searchTerm) {
return $doc['category'] === $searchTerm;
}),
'id'
)
]
]
];
// クエリコンテンツを印刷します
print_r($query);
?>
array_column関数は、特に必要なフィールドを効率的に抽出できるElasticsearchクエリを構築する場合、多次元配列からデータを抽出するのに非常に適しており、正しいクエリ形式を構築するのに役立ちます。
データソースに大量のドキュメントが含まれている場合、 array_column関数を使用すると、コードのシンプルさと読みやすさが大幅に向上し、アレイを手動で移動する手間を効果的に回避できます。
他の配列操作関数( Array_Filterなど)とArray_Columnを組み合わせることにより、ElasticSearchの複雑なクエリフィールド配列を構築して、さまざまなクエリニーズを満たすことができます。
この記事があなたを助けることを願っています!質問がある場合、またはPHPアレイの操作スキルについて詳しく知りたい場合は、お気軽に質問してください!