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

发布于 2016-10-19 08:13:41 字数 514 浏览 1377 评论 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) { }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(1

甜柠檬 2016-12-31 18:27:34

这个函数是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;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文