Calcule la différence de deux tableaux associatifs, compare les données et les index avec une fonction de rappel

# array_udiff_uassoc

(PHP 5, PHP 7, PHP 8)

array_udiff_uassoc — Calcule la différence de deux tableaux associatifs, compare les données et les index avec une fonction de rappel

### Description

function array_udiff_uassoc(
array `$array`,
array `...$arrays`,
callable `$value_compare_func`,
callable `$key_compare_func`
): array

Calcule la différence de deux tableaux associatifs, compare les données et les index avec une fonction de rappel.

Il est à noter que les clés sont utilisées dans les comparaisons contrairement à array_diff() et array_udiff().

### Liste de paramètres

`array`

  Le premier tableau.

`arrays`

  Tableaux à comparer.

`value_compare_func`
  La fonction de comparaison doit retourner un entier inférieur à, égal à, ou supérieur à 0 si le premier argument est considéré comme, respectivement, inférieur à, égal à, ou supérieur au second.
  function callback(mixed `$a`, mixed `$b`): int
  Attention

  Retourner des valeurs non-entières à partir de la fonction de comparaison, telles que float, entraînera une conversion interne de la valeur de retour du rappel en int. Ainsi, des valeurs telles que `0.99` et `0.1` seront toutes deux converties en une valeur entière de `0`, ce qui comparera de telles valeurs comme égales.

  Attention

  La fonction de rappel de tri doit traiter n'importe quelle valeur de n'importe quel tableau dans n'importe quel ordre, quel que soit l'ordre dans lequel elles ont été initialement fournies. Cela s'explique par le fait que chaque tableau individuel est d'abord trié avant d'être comparé aux autres tableaux. Par exemple :

      <?php
      $arrayA = ["chaîne", 1];
      $arrayB = [["value" => 1]];
      // $item1 et $item2 peuvent être l'une des valeurs suivantes : "chaîne", 1 ou ["value" => 1]
      $compareFunc = static function ($item1, $item2) {
          $value1 = is_string($item1) ? strlen($item1) : (is_array($item1) ? $item1["value"] : $item1);
          $value2 = is_string($item2) ? strlen($item2) : (is_array($item2) ? $item2["value"] : $item2);
          return $value1 <=> $value2;
      };
      ?>

`key_compare_func`

  La comparaison des clés (indices) est effectuée par la fonction de rappel `key_compare_func`. Ce comportement est différent de celui de array_udiff_assoc(), vu que cette dernière utilise une fonction interne pour comparer les indices.

### Valeurs de retour

Retourne un tableau contenant toutes les valeurs du tableau `array` qui ne sont présentes dans aucun autre argument.

### Exemples

Exemple #1 Exemple avec array_udiff_uassoc()

    <?php
    class cr {
        private $priv_member;
        function __construct($val)
        {
            $this->priv_member = $val;
        }

        static function comp_func_cr($a, $b)
        {
            if ($a->priv_member === $b->priv_member) return 0;
            return ($a->priv_member > $b->priv_member)? 1:-1;
        }

        static function comp_func_key($a, $b)
        {
            if ($a === $b) return 0;
            return ($a > $b)? 1:-1;
        }
    }
    $a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
    $b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);

    $result = array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), array("cr", "comp_func_key"));
    print_r($result);
    ?>

L'exemple ci-dessus va afficher :

    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )

        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )

        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    )

Dans notre exemple, l'on voit que la paire `"1" => new cr(4)` est présente dans les deux tableaux et donc, absente du tableau résultant. Il faut garder en tête qu'il faut fournir deux fonctions de rappel.

### Notes

> Note: Il est à noter que cette fonction ne vérifie qu'une seule dimension d'un tableau multidimensionnel. Il est possible, bien sûr, de tester une dimension particulière en utilisant par exemple `array_udiff_uassoc($array1[0], $array2[0], "data_compare_func", "key_compare_func");`.

### Voir aussi

- array_diff() - Calcule la différence entre des tableaux
- array_diff_assoc() - Calcule la différence de deux tableaux, en prenant aussi en compte les clés
- array_udiff() - Calcule la différence entre deux tableaux en utilisant une fonction de rappel
- array_udiff_assoc() - Calcule la différence entre des tableaux avec vérification des index, compare les données avec une fonction de rappel
- array_intersect() - Calcule l'intersection de tableaux
- array_intersect_assoc() - Calcule l'intersection de deux tableaux avec des tests sur les index
- array_uintersect() - Calcule l'intersection de deux tableaux, compare les données en utilisant une fonction de rappel
- array_uintersect_assoc() - Calcule l'intersection de deux tableaux avec des tests sur l'index, compare les données en utilisant une fonction de rappel
- array_uintersect_uassoc() - Calcule l'intersection de deux tableaux avec des tests sur l'index, compare les données et les index des deux tableaux en utilisant une fonction de rappel séparée

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open