Array_Combine reçoit deux tableaux sous forme de paramètres, le premier tableau en tant que clé et le deuxième tableau comme valeur. Si les deux tableaux ont des longueurs différentes, un avertissement est lancé et faux est renvoyé.
$keys = ['name', 'email', 'age'];
$values = ['Alice', '[email protected]', 30];
$result = array_combine($keys, $values);
// Sortir:['name' => 'Alice', 'email' => '[email protected]', 'age' => 30]
print_r($result);
Par rapport à la méthode de rédaction FoEach traditionnelle, cette méthode est plus compacte et le code est plus lisible.
L'utilisation de ForEach pour construire des tableaux associatifs est également un moyen courant, le code est le suivant:
$keys = ['name', 'email', 'age'];
$values = ['Alice', '[email protected]', 30];
$result = [];
foreach ($keys as $index => $key) {
$result[$key] = $values[$index];
}
L'avantage de cette approche est sa flexibilité, et il peut ajouter un traitement logique pendant le processus de construction, tel que la mise en forme de données ou le fait de sauter certaines valeurs.
Si du point de vue des performances, Array_Combine est une fonction interne implémentée dans le langage C, et il n'y a presque aucun écart lorsqu'il s'agit de petites quantités de données. Mais lorsqu'il s'agit de grands tableaux (comme des milliers de paires de valeurs clés), il fonctionne généralement légèrement mieux que Forach manuel.
Cependant, les améliorations des performances ne sont pas une différence d'ordre de magnitude et sont généralement évidentes dans des millions d'itérations. Voici un exemple simple de référence (pour référence uniquement):
$keys = range(1, 100000);
$values = range(100001, 200000);
// utiliser array_combine
$start = microtime(true);
array_combine($keys, $values);
echo 'array_combine: ' . (microtime(true) - $start) . "s\n";
// utiliser foreach
$start = microtime(true);
$result = [];
foreach ($keys as $i => $key) {
$result[$key] = $values[$i];
}
echo 'foreach: ' . (microtime(true) - $start) . "s\n";
Dans la plupart des cas, Array_Combine sera légèrement meilleur, mais la différence entre les deux ne dépassera pas 5 à 10%.
Si vous êtes sûr que les deux tableaux ont la même longueur et que la structure des données est stable, l'utilisation de Array_Combine est un choix plus intelligent, non seulement le code est plus court, mais la probabilité d'erreur est faible.
$userFields = ['id', 'name', 'email'];
$userData = [101, 'John Doe', '[email protected]'];
$user = array_combine($userFields, $userData);
S'il existe une possibilité d'incohérence des données, comme un tableau renvoyé par la base de données et une autre entrée par l'utilisateur, il est recommandé d'utiliser ForEach et d'ajouter une logique de vérification:
$result = [];
$minLength = min(count($keys), count($values));
for ($i = 0; $i < $minLength; $i++) {
$result[$keys[$i]] = $values[$i];
}
Ou journalisation pour le dépannage ultérieur:
if (count($keys) !== count($values)) {
error_log("Longueur de réseau incohérente: keys(" . count($keys) . "), values(" . count($values) . ")");
}
Dans certains cas, vous pouvez utiliser Array_map et Array_Combine en même temps pour améliorer la puissance de traitement de la chaîne:
$raw = ['John', '[email protected]', 28];
$keys = ['name', 'email', 'age'];
$user = array_combine($keys, array_map('trim', $raw));
Cette méthode est à la fois concise et la logique de prétraitement des données de nids.