PHPでは、 Array_combine()とArray_reduce()は、それぞれ2つの配列を連想配列に結合し、特定のルール(つまり、簡素化または変換)に従って配列要素を削減するために使用される非常に強力な関数です。これらの2つの機能を一緒に使用すると、より複雑なデータ構造を簡単に構築できます。この記事では、これら2つの機能を組み合わせて使用して、多層ネストアレイまたは他の複雑なデータ構造を構築する方法を検討します。
Array_combine()は、2つの配列をパラメーターとして受け入れ、最初の配列の値をキーとして、2番目の配列の値を値として取得し、最後に新しい連想配列を返すPHPビルトイン関数です。 2つの配列の長さが異なる場合、関数はfalseを返します。
$keys = ["name", "age", "gender"];
$values = ["John", 25, "male"];
$result = array_combine($keys, $values);
print_r($result);
出力:
Array
(
[name] => John
[age] => 25
[gender] => male
)
array_reduce()は、PHPビルトイン関数でもあり、コールバック関数を介して配列の値を単一の値に徐々に簡素化するために使用されます。通常、この値は累積額または他の複雑な構造になります。
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, function($carry, $item) {
return $carry + $item;
});
echo $sum; // 出力 15
Array_combine()およびarray_reduce()は、特にキー価値ペアの配列に基づいて何らかの概要構造を生成する必要がある場合、複雑なデータ構造を扱う場合に非常に役立ちます。これら2つの機能を組み合わせることにより、より複雑なネストされた配列を作成できます。
生徒の成績を含むデータのセットがあるとします。これを被験者ごとにグループ化し、 array_combine()を介して各被験者のグレードの概要を生成したいとします。
$students = [
["name" => "John", "subject" => "Math", "score" => 85],
["name" => "Alice", "subject" => "Math", "score" => 92],
["name" => "Bob", "subject" => "Math", "score" => 78],
["name" => "John", "subject" => "Science", "score" => 88],
["name" => "Alice", "subject" => "Science", "score" => 94],
["name" => "Bob", "subject" => "Science", "score" => 79],
];
$subjects = array_reduce($students, function($carry, $item) {
// 使用 subject 鍵として,スコアは値としてグループ化されます
if (!isset($carry[$item['subject']])) {
$carry[$item['subject']] = [];
}
$carry[$item['subject']][] = $item['score'];
return $carry;
}, []);
print_r($subjects);
出力:
Array
(
[Math] => Array
(
[0] => 85
[1] => 92
[2] => 78
)
[Science] => Array
(
[0] => 88
[1] => 94
[2] => 79
)
)
この例では、最初にarray_reduce()を使用して、被験者に基づいて学生のスコアをグループ化します。次に、さらにarray_combine()を使用して、各被験者の学生名とグレードをマッピングして、より複雑な構造を構築できます。
次に、 array_combine()を使用して、学生名で各科目の学生スコアをさらに分割し続けます。
$students = [
["name" => "John", "subject" => "Math", "score" => 85],
["name" => "Alice", "subject" => "Math", "score" => 92],
["name" => "Bob", "subject" => "Math", "score" => 78],
["name" => "John", "subject" => "Science", "score" => 88],
["name" => "Alice", "subject" => "Science", "score" => 94],
["name" => "Bob", "subject" => "Science", "score" => 79],
];
$subjects = array_reduce($students, function($carry, $item) {
if (!isset($carry[$item['subject']])) {
$carry[$item['subject']] = [];
}
// 以学生的姓名鍵として,グレードは値としてマッピングされます
$carry[$item['subject']] = array_combine(
array_column($carry[$item['subject']], 'name'),
array_column($carry[$item['subject']], 'score')
);
return $carry;
}, []);
print_r($subjects);
この時点で、 Array_Column()を介して対応するキーと値を抽出し、最後に、より複雑なネストされたアレイを構築し、科目と学生名に従って検索および操作できるようにします。
このようにして、 array_combine()とarray_reduce()を組み合わせることにより、さまざまなルールに従ってグループ化および要約されたデータ構造を簡単に構築できます。実際の開発では、これらの機能を柔軟に使用すると、データ処理の効率と読みやすさを効果的に改善できます。