Pendant le développement de PHP, nous rencontrons souvent des scénarios où nous devons créer des "tableaux clairsemés" - c'est-à-dire que seuls certains indices spécifiques dans le tableau ont des valeurs, et d'autres parties sont vides ou indéfinies. Dans PHP, des tableaux clairsemés peuvent être implémentés par affectation manuelle, mais certains développeurs ont tenté de simplifier ce processus à l'aide de la fonction Array_Fill () . Alors, Array_Fill () est-il vraiment adapté pour créer des tableaux clairsemés? Analyons-le sur place.
array_fill () est une fonction pour remplir rapidement des tableaux. La syntaxe de base est la suivante:
array array_fill ( int $start_index , int $count , mixed $value )
$ start_index : index de démarrage.
Nombre $ : le nombre d'éléments à remplir.
$ Value : la valeur de chaque élément.
Par exemple:
$result = array_fill(5, 3, 'test');
print_r($result);
La sortie est la suivante:
Array
(
[5] => test
[6] => test
[7] => test
)
Comme vous pouvez le voir, il remplit 3 éléments avec la valeur «test» à partir de l'index 5.
Une caractéristique principale des tableaux clairsemés est qu'il peut y avoir des "trous" entre les index. Par exemple, nous pourrions avoir besoin d'avoir des valeurs sur l'index 3, 15 et 1000 dans le tableau, tandis que le reste reste vide ou indéfini.
Construire manuellement les tableaux clairsemés peut ressembler à ceci:
$data = [];
$data[3] = 'alpha';
$data[15] = 'beta';
$data[1000] = 'gamma';
Cette approche est très intuitive, et le tableau lui-même ne prend pas trop de place, car le tableau de PHP est essentiellement une carte ordonnée (table de hachage) et les index non définis ne prennent pas vraiment de mémoire.
En théorie, vous pouvez utiliser array_fill () pour créer un certain segment continue clairsemé. Par exemple:
$data = array_fill(1000, 1, 'only_one');
Sortir:
Array
(
[1000] => only_one
)
Cela implémente l'attribution à des index élevés, mais Array_Fill () ne peut pas être fait en même temps si vous souhaitez créer plusieurs valeurs d'index discontinues hop-by (telles que la définition des valeurs pour 3, 15 et 1000 en même temps). Vous devez l'appeler plusieurs fois:
$data = array_fill(3, 1, 'alpha') +
array_fill(15, 1, 'beta') +
array_fill(1000, 1, 'gamma');
Cela obtiendra une structure de tableau clairsemée que vous souhaitez, mais cela perd en fait l'avantage d'une "génération de lots efficace". En revanche, la cession manuelle directe est plus concise:
$data = [
3 => 'alpha',
15 => 'beta',
1000 => 'gamma'
];
L'avantage de Array_Fill () est une initialisation continue, par exemple:
Générer des valeurs initiales pour le tableau.
Initialisation unifiée d'une certaine structure (telle que 0 rembourrage, rembourrage booléen).
Contrôle le câble de décalage initial pour provoquer la position de départ.
Mais si vous faites face à la nécessité de tableaux clairsemés avec des "index discontinues" ou des "grands intervalles", ce n'est pas l'outil le plus approprié.
Array_Fill () est une fonction très utile pour initialiser rapidement les tableaux avec des index continus. Mais lors de la construction d'un "réseau clairsemé" typique, il semble être impuissant. Si vos besoins sont des tableaux clairsemés discontinus, la méthode d'utilisation directement de l'affectation d'index est plus flexible et contrôlable.
Bien sûr, si vous avez une logique unifiée pour créer des tableaux d'index clairsemés, vous pouvez également encapsuler une fonction d'assistance pour combiner la mise en œuvre array_fill () . Par exemple:
function sparse_fill(array $indexes, $value) {
$result = [];
foreach ($indexes as $index) {
$result[$index] = $value;
}
return $result;
}
$data = sparse_fill([3, 15, 1000], 'example');
Cette méthode est plus adaptée aux besoins de remplissage clairsemé à grande échelle et est plus facile à entretenir.