Dans PHP, Array_Combine () et Array_Reduce () sont des fonctions très puissantes, respectivement utilisées pour combiner deux tableaux dans un tableau associatif, et pour réduire les éléments du tableau selon des règles spécifiques (c'est-à-dire simplifier ou convertir). Lorsque ces deux fonctions sont utilisées ensemble, des structures de données plus complexes peuvent être facilement construites. Dans cet article, nous explorerons comment utiliser ces deux fonctions en combinaison pour construire des tableaux imbriqués multicouches ou d'autres structures de données complexes.
Array_Combine () est une fonction intégrée PHP qui accepte deux tableaux sous forme de paramètres, prend la valeur du premier tableau comme clé et la valeur du deuxième tableau comme valeur et renvoie enfin un nouveau tableau associatif. Si les deux tableaux ont des longueurs différentes, la fonction renvoie false .
$keys = ["name", "age", "gender"];
$values = ["John", 25, "male"];
$result = array_combine($keys, $values);
print_r($result);
Sortir:
Array
(
[name] => John
[age] => 25
[gender] => male
)
Array_reduce () est également une fonction intégrée PHP, qui est utilisée pour simplifier progressivement la valeur d'un tableau en une seule valeur via une fonction de rappel. En règle générale, cette valeur peut être une somme accumulée ou d'autres structures complexes.
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, function($carry, $item) {
return $carry + $item;
});
echo $sum; // Sortir 15
Array_combine () et array_reduce () sont très utiles lorsque vous traitez des structures de données complexes, en particulier lorsque vous devez générer une sorte de structure récapitulative basée sur un tableau de paires de valeurs clés. Nous pouvons créer un tableau imbriqué plus complexe en combinant ces deux fonctions.
Supposons que nous ayons un ensemble de données contenant les notes de l'étudiant, que nous voulons regrouper par sujet, puis générer un résumé des notes pour chaque sujet via 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) {
// utiliser subject Comme clé,Les scores sont regroupés en valeurs
if (!isset($carry[$item['subject']])) {
$carry[$item['subject']] = [];
}
$carry[$item['subject']][] = $item['score'];
return $carry;
}, []);
print_r($subjects);
Sortir:
Array
(
[Math] => Array
(
[0] => 85
[1] => 92
[2] => 78
)
[Science] => Array
(
[0] => 88
[1] => 94
[2] => 79
)
)
Dans cet exemple, nous utilisons d'abord Array_reduce () pour regrouper les scores des étudiants en fonction des matières . Ensuite, nous pouvons en outre utiliser array_combine () pour cartographier les noms d'étudiants et les notes de chaque sujet pour construire une structure plus complexe.
Ensuite, nous continuons à utiliser Array_combine () pour décomposer davantage les scores des étudiants dans chaque matière par nom d'élève:
$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']] = [];
}
// 以学生的姓名Comme clé,Les notes sont mappées sous forme de valeurs
$carry[$item['subject']] = array_combine(
array_column($carry[$item['subject']], 'name'),
array_column($carry[$item['subject']], 'score')
);
return $carry;
}, []);
print_r($subjects);
À l'heure actuelle, nous extraissons les clés et les valeurs correspondantes via array_column () , et enfin nous pouvons construire un tableau imbriqué plus complexe, nous permettant de rechercher et de fonctionner en fonction des noms de sujet et d'étudiants.
De cette façon, en combinant array_combine () et array_reduce () , nous pouvons facilement construire des structures de données groupées et résumées selon différentes règles. Dans le développement réel, l'utilisation de ces fonctions de manière flexible peut efficacement améliorer l'efficacité et la lisibilité du traitement des données.