Current Location: Home> Latest Articles> Application logic for implementing "recently modified fields" detection

Application logic for implementing "recently modified fields" detection

M66 2025-06-06

How to use PHP's array_diff_uassoc function to implement the application logic of "recently modified fields" detection?

In many development applications, especially in database and form update functions, we often need to perform "recently modified fields" detection. Simply put, developers need to compare two arrays and identify which fields have changed. PHP provides powerful built-in functions to achieve this requirement, one of which is array_diff_uassoc .

The array_diff_uassoc function can not only be used to compare the values ​​of two arrays, but can also be processed according to custom comparison rules. Below, we will demonstrate how to use array_diff_uassoc to detect whether the field has changed through a practical application scenario.

1. Understand the array_diff_uassoc function

Before explaining how to use array_diff_uassoc , let's briefly understand how it works. array_diff_uassoc is used to calculate the difference between two arrays, similar to array_diff_assoc , but it allows you to define how keys and values ​​are compared through a callback function.

Function definition:

 array_diff_uassoc ( array $array1 , array $array2 , callable $value_compare_func ) : array
  • $array1 : The first array.

  • $array2 : The second array.

  • $value_compare_func : A callback function used to compare array elements. The function needs to accept two parameters, return an integer value, and determine the relationship between the two values ​​(equal to 0, first is greater than the second is a positive value, and second is greater than the first is a negative value).

2. Application scenario: Detect "Recent Modified Fields"

Suppose we have a user information form that updates user information through the web interface. In this process, we need to know which fields have been modified.

Data example:

We have two arrays representing the information of the user before and after submitting the form:

 // Raw data:Information before submission
$oldData = [
    'name' => 'John Doe',
    'email' => 'johndoe@m66.net',
    'age' => 25,
    'address' => '123 Main Street'
];

// Data after submission:User modified information
$newData = [
    'name' => 'John Doe',
    'email' => 'johndoe@m66.net',
    'age' => 26,  // Modified
    'address' => '123 Main Street'
];

Our goal is to detect which fields in $newData have changed compared to $oldData . In this scenario, the email field does not change, but the age field changes.

3. Use array_diff_uassoc for detection

 // Define a comparison callback function
function customCompare($a, $b) {
    return strcmp($a, $b);
}

// usearray_diff_uassocDetect differences
$changedFields = array_diff_uassoc($newData, $oldData, 'customCompare');

// 输出Modified的字段
print_r($changedFields);

In this example, the customCompare function uses strcmp to compare two strings (or other types of data), and returns 0 if equal, indicating that the field value has not changed. If the return value is not 0, it means that the field has changed.

Output result:

 Array
(
    [age] => 26
)

As shown above, the output $changedFields array contains only the age field, which is the only field that has been modified.

4. Summary

The array_diff_uassoc function is very useful in field change detection. By comparing key-value pairs of two arrays, it can accurately identify which fields have changed. By combining custom comparison callback functions, you can achieve flexible and efficient difference detection in a variety of scenarios.

5. Complete code example

Here is a complete code example showing how to detect "recently modified fields" using array_diff_uassoc :

 <?php
// Raw data:Information before submission
$oldData = [
    'name' => 'John Doe',
    'email' => 'johndoe@m66.net',
    'age' => 25,
    'address' => '123 Main Street'
];

// Data after submission:User modified information
$newData = [
    'name' => 'John Doe',
    'email' => 'johndoe@m66.net',
    'age' => 26,  // Modified
    'address' => '123 Main Street'
];

// Define a comparison callback function
function customCompare($a, $b) {
    return strcmp($a, $b);
}

// usearray_diff_uassocDetect differences
$changedFields = array_diff_uassoc($newData, $oldData, 'customCompare');

// 输出Modified的字段
print_r($changedFields);
?>