Dans PHP, Array_Fill () est une fonction très pratique pour créer un tableau avec des valeurs par défaut. Cependant, une limitation de celui-ci est que l'utilisation de clés de chaîne (c'est-à-dire des tableaux associatifs) n'est pas pris en charge. Alors, que devons-nous faire si nous voulons utiliser une méthode Array_Fill () en forme pour initialiser un tableau associatif avec un nom de clé spécifié?
Cet article expliquera comment encapsuler une fonction personnalisée pour prendre en charge l'initialisation par lots des valeurs de clés associées.
Voyons d'abord comment fonctionne le standard array_fill () :
$filled = array_fill(0, 3, 'default');
print_r($filled);
Le résultat de la sortie est:
Array
(
[0] => default
[1] => default
[2] => default
)
Vous pouvez voir qu'il ne prend en charge que les clés numériques, en remplissant le nombre spécifié d'éléments de l'indice de départ.
Supposons que nous ayons un ensemble prédéfini de noms de clés, comme suit:
$keys = ['username', 'email', 'age'];
Nous voulons les initialiser immédiatement à une valeur par défaut unifiée, telle que «n / a» , et générer la structure suivante:
[
'username' => 'N/A',
'email' => 'N/A',
'age' => 'N/A'
]
Bien que PHP ait une fonction array_fill_keys () intégrée pour atteindre cet objectif, à des fins d'enseignement, nous encapsulons nous-mêmes une version plus extensible:
/**
* Utilisez le tableau et la valeur des clés spécifiés,Initialiser un tableau associatif
*
* @param array $keys Tableau de noms de clés à utiliser
* @param mixed $value Valeur par défaut pour chaque clé
* @return array Réseau associatif initialisé
*/
function array_fill_keys_custom(array $keys, $value): array {
$result = [];
foreach ($keys as $key) {
$result[$key] = $value;
}
return $result;
}
$fields = ['username', 'email', 'age'];
$defaultValue = 'N/A';
$initializedArray = array_fill_keys_custom($fields, $defaultValue);
print_r($initializedArray);
Résultat de sortie:
Array
(
[username] => N/A
[email] => N/A
[age] => N/A
)
Nous pouvons également étendre cette fonction pour prendre en charge la génération dynamique de différentes valeurs en fonction du nom de la clé, comme l'utilisation d'une fonction de rappel:
function array_fill_keys_callback(array $keys, callable $callback): array {
$result = [];
foreach ($keys as $key) {
$result[$key] = $callback($key);
}
return $result;
}
$keys = ['token', 'session_id', 'timestamp'];
$data = array_fill_keys_callback($keys, function($key) {
switch ($key) {
case 'token':
return bin2hex(random_bytes(8));
case 'session_id':
return uniqid('sess_', true);
case 'timestamp':
return date('Y-m-d H:i:s');
default:
return null;
}
});
print_r($data);
Exemple de sortie (peut être différent pour chaque exécution):
Array
(
[token] => 9f3a8f734b23f9cd
[session_id] => sess_6623fa3890adf3.20534250
[timestamp] => 2025-04-20 13:52:43
)
Cette encapsulation est idéale pour l'initialisation du champ de formulaire, la génération de modèles de retour de l'API ou la construction du tableau de configuration par défaut. Par exemple, lorsque vous construisez le retour par défaut de l'API REST:
$responseTemplate = array_fill_keys_custom(['code', 'message', 'data'], null);
$responseTemplate['code'] = 200;
$responseTemplate['message'] = 'L'opération est réussie';
$responseTemplate['data'] = ['url' => 'https://m66.net/api/example'];
print_r($responseTemplate);
Bien que PHP fournit des fonctions de tableau prêt à l'emploi (telles que Array_Fill_Keys () ), grâce à l'encapsulation personnalisée, nous pouvons implémenter des méthodes d'initialisation plus flexibles, en particulier lorsque vous traitez des tableaux associatifs.
Cette méthode a non seulement un code plus élégant, mais améliore également votre contrôle sur la logique de fonctionnement du tableau. Ce sera un gadget très utile dans les projets réels, en particulier lorsqu'il est nécessaire de générer de grandes quantités de données structurées dynamiquement.