Position actuelle: Accueil> Derniers articles> Que dois-je faire si l'ordre de paire de valeurs clés dans array_intersect_uassoc est incohérent?

Que dois-je faire si l'ordre de paire de valeurs clés dans array_intersect_uassoc est incohérent?

gitbox 2025-05-26

Dans PHP, la fonction Array_INTERSECT_UASSOC est utilisée pour comparer les clés et les valeurs de deux tableaux, renvoyant la pièce où les paires de valeurs de clé sont les mêmes dans les deux tableaux. Ce qui le rend différent de Array_INTERSECT_ASSOC , c'est que Array_INTERSECT_UASSOC permet aux utilisateurs de personnaliser la fonction de comparaison des touches.

1. Utilisation de base de Array_INTERSECT_UASSOC

La fonction est définie comme suit:

 array_intersect_uassoc(array $array1, array $array2, callable $key_compare_func): array
  • $ array1 et $ array2 sont deux tableaux participant à la comparaison.

  • $ key_compare_func est une fonction définie par l'utilisateur pour comparer les clés, et la valeur de retour est similaire à Strcmp .

2. Performance lorsque la commande est incohérente

Lorsque l'ordre des paires de réseaux de valeurs clés est incohérent, Array_INTERSECT_UASSOC comparera toujours en fonction de la relation correspondante entre les clés et les valeurs. C'est-à-dire que les clés et les valeurs doivent être "égales" pour apparaître dans le résultat, quelle que soit leur ordre dans le tableau.

Par exemple:

 <?php
$array1 = [
    'a' => 1,
    'b' => 2,
];

$array2 = [
    'b' => 2,
    'a' => 1,
];

$result = array_intersect_uassoc($array1, $array2, 'strcmp');

print_r($result);

Sortir:

 Array
(
    [a] => 1
    [b] => 2
)

Même si l'ordre des paires de valeurs clés dans $ array2 est différent de $ array1 , le résultat contient toujours toutes les paires de valeurs clés correspondantes.

3. Lorsque les fonctions de comparaison personnalisées entraînent l'ordre pour affecter les résultats

En supposant que votre fonction de comparaison personnalisée est sensible à l'ordre, elle peut entraîner des défaillances de correspondance. La fonction de comparaison de chaîne par défaut STRCMP est indépendante de l'ordre, mais si la fonction de comparaison que vous avez écrite contient de l'ordre ou d'autres conditions, le résultat peut être différent.

Si vous souhaitez vous assurer que les paires de valeurs clés peuvent correspondre correctement même si elles sont dans des ordres différents, vous pouvez suivre les suggestions suivantes:

  • Assurez-vous que la fonction de comparaison compare uniquement les valeurs de la clé elle-même et n'apporte pas une logique liée séquentielle.

  • Triez d'abord les clés du tableau , puis utilisez Array_INTERSECT_UASSOC pour comparaison pour éviter l'impact des différences de commande.

Exemple: trier d'abord puis comparer

 <?php
$array1 = [
    'b' => 2,
    'a' => 1,
];

$array2 = [
    'a' => 1,
    'b' => 2,
];

// Triez les clés
ksort($array1);
ksort($array2);

$result = array_intersect_uassoc($array1, $array2, 'strcmp');

print_r($result);

De cette façon, même si l'ordre initial est différent, l'ordre sera cohérent après le tri, évitant les résultats inattendus possibles des différences de commande.

4. Résumé

  • Array_INTERSECT_UASSOC compare les clés et les valeurs, et l'ordre lui-même n'affecte pas le résultat correspondant.

  • Les fonctions de comparaison des clés personnalisées devraient éviter d'inclure une logique séquentiellement liée.

  • Pour être sûr, vous pouvez utiliser KSORT () pour trier les tableaux participant d'abord à la comparaison pour assurer l'ordre uniforme.


 <?php
$array1 = [
    'b' => 2,
    'a' => 1,
];

$array2 = [
    'a' => 1,
    'b' => 2,
];

ksort($array1);
ksort($array2);

$result = array_intersect_uassoc($array1, $array2, 'strcmp');

print_r($result);