The array_udiff_assoc Function

The array_udiff_assoc function returns an array containing all the values from the first array that are not present in any of the other arrays. Key comparison is performed by PHP's internal mechanism, while value comparison is done using a user-defined callback function.

Syntax

phparray_udiff_assoc(array $array1, array $array2, ..., callable $value_compare_func): array

Example

Comparing arrays with a custom function:

php<?php
  function compare($a, $b) {
    return $a <=> $b;
  }

  $array1 = ["a" => "green", "b" => "brown", "c" => "blue"];
  $array2 = ["a" => "green", "b" => "yellow", "d" => "blue"];
  
  print_r(array_udiff_assoc($array1, $array2, "compare"));
?>

Code execution result:

phpArray
(
  [b] => brown
  [c] => blue
)

Example

Comparison with numeric indexes:

php<?php
  function numCompare($a, $b) {
    return $a - $b;
  }

  $array1 = [10 => "apple", 20 => "banana", 30 => "cherry"];
  $array2 = [10 => "pear", 20 => "banana", 40 => "cherry"];
  
  print_r(array_udiff_assoc($array1, $array2, "strcmp"));
?>

Code execution result:

phpArray
(
  [10] => apple
  [30] => cherry
)

Example

Complex object comparison:

php<?php
  class Product {
    public $id;
    public $name;
    
    public function __construct($id, $name) {
      $this->id = $id;
      $this->name = $name;
    }
  }

  function objCompare($a, $b) {
    return strcmp($a->name, $b->name);
  }

  $products1 = [
    "p1" => new Product(1, "Laptop"),
    "p2" => new Product(2, "Phone")
  ];
  
  $products2 = [
    "p1" => new Product(3, "Tablet"),
    "p3" => new Product(2, "Phone")
  ];
  
  print_r(array_udiff_assoc($products1, $products2, "objCompare"));
?>

Code execution result:

phpArray
(
  [p1] => Product Object
    (
      [id] => 1
      [name] => Laptop
    )
)

See Also

  • the array_diff_assoc function,
    which computes the difference of arrays with index check
  • the array_udiff function,
    which computes the difference of arrays using a callback function (without index check)