PHP比较两个属性相同但属性值不同的对象,得到不匹配的值

PHP比较两个属性相同但属性值不同的对象,得到不匹配的值,php,object,comparison,Php,Object,Comparison,我将这两个对象包含在一个数组中: array (size=2) 0 => object(stdClass)[20] public 'name' => string 'John' (length=4) public 'surname' => string 'D' (length=1) public 'id_number' => string '924' (length=3) public 'file' => string '1001' (lengt

我将这两个对象包含在一个数组中:

array (size=2)
 0 => 
object(stdClass)[20]
  public 'name' => string 'John' (length=4)
  public 'surname' => string 'D' (length=1)
  public 'id_number' => string '924' (length=3)
  public 'file' => string '1001' (length=4)
  public 'arrival_date' => string '1368466111' (length=10)
1 => 
object(stdClass)[21]
  public 'name' => string 'John' (length=4)
  public 'surname' => string 'D' (length=1)
  public 'id_number' => string '924' (length=3)
  public 'file' => string '1002' (length=4)
  public 'arrival_date' => string '1368466190' (length=10)
如果能提供3个数组或3个对象,如以下所示,那就太好了:

array('name'=>'John','surname'=>'D','id_number'=>'924') - contains the matching values
array('file'=>'1001','arrival_date'=>'1368466111') - contains the first set of different values
array('file'=>'1002','arrival_date'=>'1368466190') - 2nd set of not matching values
代码背后的故事是,在每个人到达时,我打开一个文件,在某个时间点,我希望每个人列出他的名字,在他的名字和身份(每个到达时都是相同的)下面列出他的到达文件,每个文件排成一行


你觉得呢?有什么巧妙的方法可以做到这一点吗?到目前为止,我所做的是一堆乱七八糟的代码,结果很差。

有内置函数。但是,您确实需要将对象强制转换为一个数组,这样才能工作(这是一个包含对象所有公共属性的数组)。假设变量名为
$var

$a1 = (array)$var[0];
$a2 = (array)$var[1];
$inBoth       = array_intersect_assoc($a1, $a2);
$onlyInFirst  = array_diff_assoc($a1, $a2);
$onlyInSecond = array_diff_assoc($a2, $a1);

在您未测试代码并在生产时启动它之前,任何代码都不是糟糕的代码。让我看看你有什么。这正是我要找的。谢谢你。你救了我一天,不幸的是,这不适用于不可浇铸的属性。@Florian确实不会,很好。在这些情况下,您必须更详细地进行比较,并为无法手动铸造的变量创建字符串,或者手动比较字段。是的,我找到的唯一解决方案是一个好的旧循环和标识比较,收集不同的变量:/简言之,
(数组)$classA==(数组)$classB