Array_Fill () est une fonction très pratique dans PHP, qui peut être utilisée pour générer rapidement un tableau contenant des valeurs spécifiées. Cependant, cette fonction n'est pas le meilleur choix dans tous les cas. Cet article explore dans quelles circonstances ne conviennent pas à Array_Fill () et peut-être de meilleures alternatives.
Dans PHP, la syntaxe de base de Array_Fill () est la suivante:
array_fill(int $start_index, int $count, mixed $value): array
Il renvoie un tableau, commence par $ start_index , crée des éléments de comptage de $ et définit la valeur de chaque élément sur $ la valeur .
Exemple:
$filled = array_fill(0, 5, 'apple');
// Sortir: [0 => 'apple', 1 => 'apple', 2 => 'apple', 3 => 'apple', 4 => 'apple']
Bien que cette fonction puisse sembler simple et efficace, ce n'est peut-être pas l'outil le plus approprié dans certains scénarios.
array_fill () ne s'applique pas si les valeurs de chaque élément de tableau sont différentes, ou si vous voulez que chaque clé soit une valeur non continue ou générée dynamiquement.
// Exemple d'utilisation d'erreur(Ne peut pas répondre aux exigences de différentes valeurs)
$data = array_fill(0, 3, rand(1, 100));
// Toutes les valeurs seront les mêmes,Par exemple: [0 => 42, 1 => 42, 2 => 42],Au lieu de trois nombres aléatoires différents
Alternatives:
$data = [];
for ($i = 0; $i < 3; $i++) {
$data[$i] = rand(1, 100);
}
Lorsqu'il est nécessaire de générer de très grands tableaux, tels que des millions d'éléments, Array_Fill () est rapide, mais son allocation de grandes quantités de mémoire peut provoquer des goulots d'étranglement de performances ou des débordements de mémoire.
Par exemple:
$hugeArray = array_fill(0, 10000000, 0); // Peut provoquer l'épuisement de la mémoire
Dans ce cas, il est préférable d'utiliser des générateurs à la place pour retarder la génération de valeurs et enregistrer la mémoire.
Alternative: utilisez les fonctions du générateur
function generateZeros($count) {
for ($i = 0; $i < $count; $i++) {
yield 0;
}
}
La clé de Array_Fill () ne peut être qu'un entier à partir de $ start_index et ne peut pas être utilisé avec des touches de chaîne. Si vous devez indexer des clés telles que «user_1» et «user_2» comme index de tableau, vous ne pouvez pas utiliser array_fill () .
Alternatives:
$users = [];
for ($i = 1; $i <= 5; $i++) {
$users['user_' . $i] = 'default';
}
Si vous avez besoin que chaque élément soit un objet ou un tableau distinct, l'utilisation de Array_Fill () crée un problème de "copie de référence", en particulier lorsque vous utilisez un objet ou un type de référence comme valeur.
$filled = array_fill(0, 3, []);
$filled[0]['a'] = 1;
// résultat:$filled[1] et $filled[2] Il sera également affecté,Parce qu'ils pointent vers le même tableau
Façon correcte de le faire:
$filled = [];
for ($i = 0; $i < 3; $i++) {
$filled[$i] = [];
}
$filled[0]['a'] = 1;
// D'autres éléments ne sont pas affectés
Bien que Array_Fill () soit un outil puissant pour construire rapidement les tableaux de construction, il y a certaines limites dans son utilisation. Voici une brève liste de scénarios inapplicables communs:
Chaque élément nécessite une valeur différente
Les clés du tableau sont des chaînes ou des index formatés
Une optimisation de la mémoire est requise lors du traitement des données à grande échelle
Chaque élément est un objet ou une structure référencée indépendamment
Les valeurs doivent être calculées ou dépendre de la logique externe
Ce n'est qu'en choisissant une méthode de construction de tableau plus appropriée selon le scénario réel que vous pouvez écrire un programme PHP à la fois efficace et sûr.