Dans le développement de PHP, la fonction Array_Fill () est un outil très pratique qui peut générer rapidement un tableau rempli d'une longueur spécifiée et d'une valeur spécifiée. Cela est particulièrement pratique lors de l'initialisation des structures de données ou de la fin des valeurs par défaut. Cependant, une question courante sur cette fonction est: "Quelle est la taille de remplir un tableau? Y a-t-il une limite supérieure?"
La syntaxe de base de la fonction array_fill () est la suivante:
array array_fill(int $start_index, int $count, mixed $value)
$ start_index : l'indice de départ du tableau.
Nombre $ : le nombre d'éléments à remplir.
$ Value : la valeur du rembourrage.
Donnons un exemple simple:
$result = array_fill(0, 5, 'm66.net');
print_r($result);
La sortie est:
Array
(
[0] => m66.net
[1] => m66.net
[2] => m66.net
[3] => m66.net
[4] => m66.net
)
Bien que Array_Fill () lui-même ne définisse pas les restrictions évidentes, il est soumis aux aspects suivants:
PHP est un langage sensible à la mémoire, et les données remplies par array_fill () sont un tableau stocké directement en mémoire. Lorsque vous essayez de créer un très grand tableau avec lui (comme des millions ou même des centaines de millions d'éléments), vous pouvez rencontrer des erreurs telles que "Memory Overflow" ou "Script Exécution Timeout".
Par exemple, l'exemple suivant peut entraîner une erreur de «taille de mémoire autorisée»: une erreur épuisée »:
$hugeArray = array_fill(0, 100000000, 'test'); // Avis:Veuillez ne pas exécuter ce code dans l'environnement de production avec désinvolture!
Si Memory_limit de PHP est défini sur la valeur par défaut (comme 128m ou 256m), le code ci-dessus échouera presque certainement. Vous pouvez temporairement augmenter la limite de mémoire via ini_set () , mais en fin de compte, il est limité par les ressources physiques du serveur:
ini_set('memory_limit', '1G');
Le deuxième paramètre de Array_Fill () $ Count est un entier, et le maximum théorique est PHP_INT_MAX . Dans les systèmes 64 bits, PHP_INT_MAX est d'environ 9,2 × 10 ^ 18, mais en fait, vous ne pouvez pas remplir un tableau aussi grand, car la mémoire est loin d'être suffisante.
Dans les systèmes 32 bits, PHP_INT_MAX est d'environ 2 147 483 647 (2,1 milliards), mais il est toujours théorique.
Bien que PHP prenne en charge les index de tableaux en croissance automatique, ils ne sont pas infiniment grands, en particulier lorsque les index commencent par un nombre énorme, ce qui peut entraîner des problèmes de performance et même déclencher des avertissements.
$weirdArray = array_fill(PHP_INT_MAX - 5, 10, 'value');
// Cela crée un tableau clairsemé,Peut prendre beaucoup de mémoire。
PHP ne vous empêchera pas de faire cela, mais le résultat n'est peut-être pas ce que vous attendez.
La fonction Array_Fill () n'a pas de "nombre d'éléments limite" en théorie, mais il est en fait limité par la mémoire du serveur .
Dans la plupart des scénarios d'utilisation normaux, des tableaux de dizaines de milliers à des millions d'éléments sont acceptables , à condition que votre mémoire le permette.
Il est recommandé d'éviter de remplir sans signification les tableaux super-larges et de surveiller l'utilisation de la mémoire des scripts.
Si vous avez besoin d'une structure plus flexible et économique, envisagez d'utiliser un générateur ( rendement ) ou d'autres méthodes de traitement plus légères.
Si vous souhaitez construire une certaine structure de données de test ou de liste de données simulées, par exemple pour tester les performances des interfaces de pagination ou des API, vous pouvez utiliser la méthode suivante pour la mettre en œuvre conjointement avec Array_Map :
$users = array_fill(0, 1000, null);
$users = array_map(function($index) {
return [
'id' => $index,
'name' => "User_$index",
'profile' => "https://m66.net/user/$index"
];
}, array_keys($users));
print_r($users[0]);