Position actuelle: Accueil> Derniers articles> Comment rédiger une fonction array_fill_advanced () qui prend en charge les rappels de valeur par défaut pour rendre l'opération de remplissage plus flexible?

Comment rédiger une fonction array_fill_advanced () qui prend en charge les rappels de valeur par défaut pour rendre l'opération de remplissage plus flexible?

M66 2025-06-05

Dans PHP, la fonction Native Array_Fill () peut être utilisée pour remplir la plage de clés spécifiée d'un tableau avec des valeurs fixes, ce qui est simple en syntaxe et très efficace:

 $filled = array_fill(0, 5, 'default');
// résultat: ['default', 'default', 'default', 'default', 'default']

Cependant, nous voulons parfois que la valeur remplie non fixe, mais générée dynamiquement par une sorte de logique. Par exemple, remplissez des valeurs numériques incrémentielles, des uuides, des nombres aléatoires ou des structures personnalisées générées sur la base de la clé actuelle.

Pour atteindre des exigences plus flexibles, nous pouvons concevoir une version améliorée de la fonction array_fill () : array_fill_advanced () . Cette fonction vous permet de transmettre une "fonction de rappel de valeur par défaut" pour générer dynamiquement la valeur correspondante en fonction du nom de la clé.

Objectifs de conception de la fonction

  • Prend en charge le remplissage des tableaux de longueurs arbitraires

  • L'indice de démarrage peut être personnalisé (peut être entier ou une chaîne)

  • La valeur peut être fixe ou générée par une fonction de rappel.

  • La fonction de rappel accepte l'indice de clé actuel comme un paramètre

Implémentation de la fonction

Ce qui suit est l'implémentation de array_fill_advanced () :

 /**
 * Remplissez dynamiquement le tableau
 *
 * @param int|string $startIndex Démarrer le nom de la clé
 * @param int $count Nombre de remplissages
 * @param mixed $valueOrCallback Fonction de valeur ou de rappel fixe
 * @return array
 */
function array_fill_advanced($startIndex, int $count, $valueOrCallback): array {
    $result = [];

    // Déterminez si l'indice de départ est un entier
    $isNumericIndex = is_int($startIndex);

    for ($i = 0; $i < $count; $i++) {
        $key = $isNumericIndex ? $startIndex + $i : $startIndex . $i;

        if (is_callable($valueOrCallback)) {
            $result[$key] = call_user_func($valueOrCallback, $key);
        } else {
            $result[$key] = $valueOrCallback;
        }
    }

    return $result;
}

Exemple d'utilisation

Exemple 1: Remplissez des valeurs fixes

 $data = array_fill_advanced(1, 3, 'hello');
// résultat: [1 => 'hello', 2 => 'hello', 3 => 'hello']

Exemple 2: générer dynamiquement des chaînes aléatoires

 $data = array_fill_advanced(0, 5, function($index) {
    return bin2hex(random_bytes(4));
});
// résultat: [0 => '9f3a4b2c', 1 => 'fa92be77', ...]

Exemple 3: Utilisez la chaîne comme préfixe de clé

 $data = array_fill_advanced('item_', 3, function($key) {
    return strtoupper($key);
});
// résultat: ['item_0' => 'ITEM_0', 'item_1' => 'ITEM_1', ...]

Exemple 4: Remplissez un objet ou une structure de données

 $data = array_fill_advanced(0, 3, function($index) {
    return [
        'id' => $index,
        'url' => "https://m66.net/resource/{$index}"
    ];
});
/*
résultat:
[
    0 => ['id' => 0, 'url' => 'https://m66.net/resource/0'],
    1 => ['id' => 1, 'url' => 'https://m66.net/resource/1'],
    ...
]
*/

résumé

Array_Fill_Advanced () fournit aux développeurs PHP une méthode de remplissage de tableau plus générale, plus puissante et plus flexible. En introduisant des fonctions de rappel, nous pouvons non seulement réduire le code en double, mais également implémenter la construction de contenu dynamique en fonction de la logique de valeur clé.

Ceci est très utile dans des scénarios tels que le traitement des données d'initialisation par lots, la construction d'échantillons de test, la génération de données d'API simulées, etc. La combinaison de fonctions anonymes et de stratégies de nom de clé flexible, array_fill_advanced () peut devenir un gadget très pratique dans votre boîte à outils.