Position actuelle: Accueil> Derniers articles> [Comment éviter les conflits de valeur clé lors de l'utilisation de la fonction Array_flip dans PHP? 】

[Comment éviter les conflits de valeur clé lors de l'utilisation de la fonction Array_flip dans PHP? 】

gitbox 2025-09-12

[Comment éviter les conflits de valeur clé lors de l'utilisation de la fonction Array_flip dans PHP? 】

Dans PHP, la fonction Array_flip est un outil très utile qui intervient les touches et les valeurs dans un tableau. En termes simples, Array_flip prendra la clé du tableau comme la nouvelle valeur et la valeur en tant que nouvelle clé, et renvoie un nouveau tableau. Par exemple:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-variable">$flipped</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$flipped</span></span><span>);
</span></span>

La sortie sera:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; b
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; c
)
</span></span>

Cependant, lorsque vous utilisez la fonction Array_flip , vous pouvez rencontrer des conflits de valeur clé. En effet, les clés de réseau en PHP sont uniques. S'il y a des valeurs en double dans le tableau d'origine, le conflit de valeur clé se produira après l'inversion. Par défaut, Array_flip écrase les valeurs en double, entraînant une perte de données.

Exemple de conflit de valeur clé

Considérez l'exemple suivant:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];
</span><span><span class="hljs-variable">$flipped</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$flipped</span></span><span>);
</span></span>

Le résultat de sortie est le suivant:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; c
)
</span></span>

Dans cet exemple, il y a deux éléments avec une valeur de 2 dans le tableau d'origine ( 'b' => 2 et 'c' => 2 ). Après avoir appelé array_flip , la valeur 2 est écrasée par C , ce qui entraîne la perte de 'b' => 2 .

Comment éviter les conflits de valeur clé?

Pour résoudre ce problème, nous pouvons effectuer un certain traitement avant d'inverser le tableau pour nous assurer que les données ne sont pas perdues. Voici quelques méthodes couramment utilisées:

1. Utilisez la valeur du tableau comme nouvelle clé et joignez des informations supplémentaires

Une pratique courante consiste à combiner des valeurs de clés contradictoires en un tableau ou une chaîne afin que chaque nouvelle clé devienne unique. Par exemple, si les valeurs du tableau d'origine sont les mêmes, nous pouvons combiner la liaison d'origine dans un tableau en tant que nouvelle clé:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];

</span><span><span class="hljs-variable">$newArray</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$arr</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>])) {
        </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>] = </span><span><span class="hljs-variable">$key</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-comment">// Si la valeur clé est confrontée,Fusionner les vieilles clés et les nouvelles clés dans un tableau</span></span><span>
        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>])) {
            </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>][] = </span><span><span class="hljs-variable">$key</span></span><span>;
        } </span><span><span class="hljs-keyword">else</span></span><span> {
            </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>] = [</span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>], </span><span><span class="hljs-variable">$key</span></span><span>];
        }
    }
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>);
</span></span>

Sortir:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; Array
        (
            [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; b
            [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; c
        )
)
</span></span>

Dans cet exemple, nous faisons face aux conflits de valeur clé via des tableaux afin que chaque valeur en double ne soit pas perdue, mais combine plutôt les clés en double.

2. Utilisez array_count_values ​​pour calculer le nombre d'occurrences de valeurs

Si nous ne voulons pas fusionner les clés en double, mais que nous voulons plutôt savoir combien de fois chaque valeur apparaît dans le tableau d'origine, nous pouvons utiliser la fonction Array_count_values . Grâce à cette méthode, nous pouvons traiter les valeurs clés inversées pour éviter les conflits:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];

</span><span><span class="hljs-variable">$flipped</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-variable">$countedValues</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_count_values</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$flipped</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$countedValues</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>] &gt; </span><span><span class="hljs-number">1</span></span><span>) {
        </span><span><span class="hljs-variable">$flipped</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>] = </span><span><span class="hljs-variable">$value</span></span><span> . </span><span><span class="hljs-string">'_'</span></span><span> . </span><span><span class="hljs-variable">$key</span></span><span>; </span><span><span class="hljs-comment">// Merge Clé et clé d&#39;origine</span></span><span>
    }
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$flipped</span></span><span>);
</span></span>

Sortir:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; c_2
)
</span></span>

Cette méthode ajoutera un identifiant unique à chaque clé lorsque la clé est confrontée à des conflits (comme la clé d'origine), en veillant à ce que aucune donnée ne soit perdue.

3. Utilisez le codage JSON comme clé

Une autre façon consiste à convertir les valeurs en double en une chaîne JSON afin que chaque valeur devienne unique:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];

</span><span><span class="hljs-variable">$newArray</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$arr</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-title function_ invoke__">json_encode</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>)] = </span><span><span class="hljs-variable">$key</span></span><span>;
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>);
</span></span>

Sortir:

 <span><span><span class="hljs-title class_">Array</span></span><span>
(
    [</span><span><span class="hljs-string">"1"</span></span><span>] =&gt; a
    [</span><span><span class="hljs-string">"2"</span></span><span>] =&gt; c
)
</span></span>

Cette approche est adaptée lorsque vous devez convertir la valeur d'origine en une structure de données non répétée et unique.

Résumer

Éviter les conflits de valeur clé est un défi courant lors de l'utilisation de la fonction Array_flip . Si les valeurs de votre tableau peuvent être répétées, certaines stratégies existent pour garantir que les données ne sont pas perdues. Les méthodes courantes incluent la fusion des clés en double dans les tableaux, le traitement en comptant les valeurs ou en codant chaque clé unique par JSON. Le choix de la bonne stratégie dépend de vos besoins spécifiques et du scénario de traitement des données.