Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85136
  • 博文数量: 11
  • 博客积分: 187
  • 博客等级: 入伍新兵
  • 技术积分: 136
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-29 10:43
文章分类

全部博文(11)

文章存档

2016年(4)

2014年(1)

2012年(6)

我的朋友

分类: Python/Ruby

2012-02-29 11:05:51

搞php页2年多了,有时候遇到比较郁闷的问题,比如  函数 array_udiff()的使用,官方说明如下:

定义和用法

array_udiff() 函数返回一个数组,该数组包括了所有在被比较数组中,但是不在任何其它参数数组中的值,键名保留不变。

array_udiff() 函数与  的行为不同,后者用内部函数进行比较。

数据的比较是用 array_udiff() 函数的 function 进行的。function 函数带有两个将进行比较的参数。如果第一个参数小于第二个参数,则函数返回一个负数,如果两个参数相等,则要返回 0,如果第一个参数大于第二个,则返回一个正数。

语法array_udiff(array1,array2,array3...,function)
参数描述
array1必需。被比较的数组。
array2必需。用来做比较的数组。
array3可选。用来做比较的数组,可有多个。
function可选。自定义的比较回调函数。


上面没有说明,内部运行机制,所以写了个例子 如下 :


 

  1. <?php
  2. function myfunction($v1,$v2)
  3. {
  4. print_r($v1); print '|||';print_r($v2);print '
    '
    ;
  5. if ($v1 == $v2)
  6. {
  7. return 0;
  8. }
  9. return 1;
  10. }
  11. $a1=array('a','b','c','d');
  12. $a2=array('a','b','c',3,'f');

  13. print '
    '
    ;
  14. print_r(array_udiff($a1,$a2,"myfunction"));

  15. ?>

上面这段代码,将$a1   和  $a2 进行比较,然后取差集。

但是 运行结果却令我百思不得其解,如下:


b|||a
b|||c
d|||b
a|||c
c|||b
c|||a
c|||3
f|||c
b|||3
a|||b
c|||3
c|||b
c|||a
c|||c
c|||a
a|||b
a|||a
a|||b
b|||a
b|||c
b|||f
b|||d
d|||a
d|||c
d|||f

Array ( [1] => b [3] => d )

仔细看上面的结果,可以发现  $a1种的 'a' 没有和$a1 中的  d ,$a2 种的 3,f 进行对比,比较令人费解 ,并且结果没有达到预期结果,手册页没有过多的说明。

准备看php源码,看看array_udiff的实现方式,准备工作如下:PHP 5.3: svn checkout php-src-5.3

PHP 5.4: svn checkout php-src-5.4

PHP HEAD: svn checkout php-src-trunk

 

 

最新的大家可以来这查看:,下载 php源码 。(附:mac系统真操蛋,不给root权限 在/下建目录都建不了,导致白白checkout一次)

我下载的是  php5.3 ,下载下来后,ext文件夹就是相关函数列表了。还在研究,预知后事如何,请听下回分解。

阅读(1864) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~