PHP-php 查找打印两个对象中属性值不同的属性

PHP-php 查找打印两个对象中属性值不同的属性

瑾兮 发布于 2016-10-19 字数 558 浏览 1289 回复 1

不管对象属性的值是什么类型,如果来比较两个对象属性值不同的属性?看一下下面例子:

$user1 = new UserClass(); 
$obj1->age = 20;
$user2 = new UserClass();
$user2>age = 25;

var_dump(array_diff((array)$user1, (array)$user2));
//结果 array(1) { ["age"]=> int(20) }

$user1 = new UserClass();
$obj1->age = array(10,20);
$user2 = new UserClass();
$user2>age = array(10,25);

var_dump(array_diff((array)$user1, (array)$user2));
// 结果 array(0) { }

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜柠檬 2016-12-31 1 楼

这个函数是PHP文档里的,我就借花献佛了,呵呵

class UserClass{
public $age;
}

$user1 = new UserClass();
$user1->age = 20;
$user2 = new UserClass();
$user1->age = 25;

var_dump(array_diff((array)$user1, (array)$user2));
//结果 array(1) { ["age"]=> int(20) }

$user3 = new UserClass();
$user3->age = array(10,20);
$user4 = new UserClass();
$user4->age = array(10,25);

var_dump(arr_diff((array)$user3, (array)$user4));
//array(1) { ["age"]=> array(1) { [0]=> int(20) } }

function arr_diff($a1,$a2){
foreach($a1 as $k=>$v){
unset($dv);
if(is_int($k)){
// Compare values
if(array_search($v,$a2)===false) $dv=$v;
else if(is_array($v)) $dv=arr_diff($v,$a2[$k]);
if($dv) $diff[]=$dv;
}else{
// Compare noninteger keys
if(!$a2[$k]) $dv=$v;
else if(is_array($v)) $dv=arr_diff($v,$a2[$k]);
if($dv) $diff[$k]=$dv;
}
}
return $diff;
}