Hàm array_udiff_assoc

Hàm array_udiff_assoc trả về một mảng chứa tất cả các phần tử của mảng đầu tiên, mà không có mặt trong các mảng tiếp theo. Việc so sánh khóa được thực hiện bởi cơ chế tích hợp sẵn của PHP, còn việc so sánh giá trị - thông qua hàm callback do người dùng cung cấp.

Cú pháp

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

Ví dụ

So sánh các mảng với hàm do người dùng định nghĩa:

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"));
?>

Kết quả thực thi mã:

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

Ví dụ

So sánh với chỉ mục số:

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"));
?>

Kết quả thực thi mã:

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

Ví dụ

So sánh đối tượng phức tạp:

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"));
?>

Kết quả thực thi mã:

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

Xem thêm

  • hàm array_diff_assoc,
    tính toán sự khác biệt giữa các mảng với việc kiểm tra chỉ mục
  • hàm array_udiff,
    tính toán sự khác biệt giữa các mảng với hàm callback (không kiểm tra chỉ mục)