Dans PHP, la fonction Array_Fill () est généralement utilisée pour remplir rapidement un tableau, qui accepte trois paramètres: l'indice de départ, la longueur du tableau et la valeur du remplissage. Lorsque nous remplissons un tableau avec des données de type de référence, nous pouvons rencontrer le problème du partage de référence. Autrement dit, si nous modifions un élément dans le tableau, cela peut affecter les valeurs d'autres éléments car ils partagent la même référence.
<?php
// Définir un tableau
$reference = [];
// utiliser array_fill Remplir le tableau
$size = 5;
$reference = array_fill(0, $size, []);
// Modifier le premier élément du tableau
$reference[0]['name'] = 'John';
// Imprimer un tableau
print_r($reference);
?>
Lorsque vous exécutez le code ci-dessus, vous constaterez que tous les éléments remplis pointent réellement vers la même référence du tableau, donc après avoir modifié $ référence [0] , tous les autres éléments sont également modifiés. Il s'agit de la cause profonde du problème de partage de citations.
Pour éviter le problème de partage de référence lorsque Array_Fill () remplit un tableau, il existe quelques techniques différentes qui peuvent être utilisées pour garantir que chaque élément de tableau a une copie indépendante.
Une solution courante consiste à utiliser array_map () avec des fonctions anonymes pour créer une nouvelle copie de tableau pour chaque élément. Cela évite les problèmes de partage de référence.
<?php
// Définir la taille du tableau
$size = 5;
// utiliser array_map Remplir le tableau,et créer une nouvelle copie de tableau pour chaque élément
$reference = array_map(function() {
return []; // Retourner un nouveau tableau vide
}, array_fill(0, $size, null));
// Modifier le premier élément du tableau
$reference[0]['name'] = 'John';
// Imprimer un tableau
print_r($reference);
?>
Cette méthode crée un nouveau tableau pour chaque élément de tableau via array_map () , évitant ainsi les problèmes de partage de référence.
Une autre façon consiste à éviter les problèmes de partage des références en remplissant manuellement le tableau. Cette méthode ne s'appuie pas sur array_fill () , mais utilise un foreach ou pour la boucle pour remplir le tableau un par un.
<?php
// Définir la taille du tableau
$size = 5;
// 手动Remplir le tableau
$reference = [];
for ($i = 0; $i < $size; $i++) {
$reference[] = []; // Ajoutez un nouveau tableau vide à chaque fois
}
// Modifier le premier élément du tableau
$reference[0]['name'] = 'John';
// Imprimer un tableau
print_r($reference);
?>
L'avantage de cette approche est qu'une nouvelle instance de tableau est créée à chaque fois sans causer de problème de partage de référence.
Dans PHP, lorsque vous utilisez Array_Fill () pour remplir un tableau, si la valeur remplie est un type de référence, il peut faire partager la même référence entre les éléments du tableau, entraînant des problèmes de modification inattendus. Pour éviter ce problème, nous pouvons utiliser array_map () ou remplir manuellement le tableau pour nous assurer que chaque élément est une copie distincte.
Avec ces méthodes, vous pouvez utiliser le rembourrage du tableau plus en toute sécurité sans vous soucier des problèmes de partage de référence.