当前位置:  首页>> 技术小册>> PHP合辑3-数组函数

array_diff_uassoc()函数是PHP中的一个内置函数,用于使用用户定义函数比较键来获取一个或多个数组之间的差异。该函数比较一个或多个数组之间的键和值,并返回第一个数组中不存在于其他数组中的元素。根据提供给该函数的用户定义函数来比较键。注意:该函数与PHP的array_diff_assoc()函数不同,因为array_diff_assoc()函数根据内部函数比较键,而array_diff_uassoc()函数根据传递给它的用户定义函数来比较键。

语法:

array_diff_uassoc(array1,array2, array3,…,arrayn, user_function)

参数:该函数接受一个参数列表,其中包含要查找差异的数组,以及用于比较键的用户定义函数。

list_of_array:该函数采用由空格分隔的数组列表,从中找到差异。在上面的语法中,数组列表是array1、array2、array3、……、arrayn。此列表必须包含至少两个数组,否则将引发警告。

user_function:这是一个字符串类型的参数,表示用于比较键的用户定义函数的名称。该函数返回一个整数,如果第一个参数大于第二个参数则返回大于0的值,小于第二个参数则返回小于0的值,等于第二个参数则返回等于0的值。

返回值:该函数返回一个包含第一个数组array1中不存在于其他参数中数组的元素的数组。比较在array1的键和值与其余数组之间进行。比较键是根据用户定义函数进行的。示例:

  1. Input : $a1=array(10=>"striver", 20=>"raj", 30=>"geek")
  2. $a2=array(20=>"striver", 10=>"raj", 30=>"geek")
  3. function user_function($a, $b)
  4. {
  5. if ($a===$b)
  6. {
  7. return 0;
  8. }
  9. return ($a>$b)?1:-1;
  10. }
  11. Output: Array
  12. (
  13. [10] => striver
  14. [20] => raj
  15. )
  16. Explanation: Since user_function returns 0 when keys
  17. are equal and 1 and -1 when greater and less respectively.
  18. So, the elements with unequal keys are in the output array.

下面程序说明了PHP中的array_diff_uassoc()函数:

  1. <?php
  2. // PHP program to illustrate the
  3. // array_diff_uassoc() function
  4. // user defined function that returns 0 if
  5. // $array1's keys are equal to any other
  6. // input array, else returns 1 if greater,
  7. // or -1 if smaller
  8. function user_function($a, $b)
  9. {
  10. if ($a===$b)
  11. {
  12. return 0;
  13. }
  14. return ($a>$b)? 1: -1;
  15. }
  16. // Input Arrays
  17. $a1=array(10=>"striver", 20=>"raj", 30=>"geek");
  18. $a2=array(20=>"striver", 10=>"raj", 30=>"geek");
  19. $result = array_diff_uassoc($a1, $a2, "user_function");
  20. print_r($result);
  21. ?>

output:

  1. Array
  2. (
  3. [10] => striver
  4. [20] => raj
  5. )

示例2:

  1. <?php
  2. // PHP program to illustrate the
  3. // array_diff_uassoc() function
  4. // user defined function that returns 1 if
  5. // $array1's keys are equal to any other
  6. // input array, else returns 1 if greater,
  7. // or 0 if smaller
  8. function user_function($a, $b)
  9. {
  10. if ($a===$b)
  11. {
  12. return 1;
  13. }
  14. return ($a>$b)? 1: 0;
  15. }
  16. // Input Arrays
  17. $a1 = array(10=>"striver", 20=>"raj", 30=>"geek");
  18. $a2 = array(20=>"striver", 10=>"raj", 30=>"geek");
  19. $result=array_diff_uassoc($a1, $a2, "user_function");
  20. print_r($result);
  21. ?>

output:

  1. Array
  2. (
  3. [20] => raj
  4. [30] => geek
  5. )

array_diff_uassoc() 对于多维数组:

array_diff_uassoc() 函数仅适用于一维数组。若要使用此函数检查多维数组,我们可以采用索引方法。

例如,对于二维数组:

array_diff_assoc(array1[index],array2[index], array3[index],…,arrayn[index], user_function)

在下面的程序中,我们比较两个位于二维数组 a1 和 a2 的第一个索引位置的数组。

  1. <?php
  2. function user_function($a, $b)
  3. {
  4. if ($a===$b)
  5. {
  6. return 0;
  7. }
  8. return ($a>$b)? 1: -1;
  9. }
  10. // Input Arrays
  11. $a1 = array(array("a" => "green", "b" => "yellow", "c" => "white", "black"), "b" => "brown", "c" => "blue", "red");
  12. $a2 = array(array("a" => "green", "b" => "yellow", "white", "d" => "black"), "yellow", "red");
  13. $result = array_diff_uassoc($a1[0], $a2[0], "user_function");
  14. print_r($result);
  15. ?>

output:

  1. Array
  2. (
  3. => white
  4. [0] => black
  5. )