我将这两个对象包含在数组中:
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
代码背后的故事是,每个人到来后,我打开一个档案,在某个时间点,我希望每个人都列出他的名字,并在他的名字和身份证明下面(每个到来都是相同的)列出他的到达文件,每个文件都在一行中。
你觉得怎么样?有没有任何巧妙的方法来实现这一目标?到目前为止我所做的是一堆乱七八糟的代码,结果不佳。
答案 0 :(得分:3)
内置功能。您需要将对象强制转换为数组才能使其工作(这是对象的所有公共属性的数组)。假设您的变量名为$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);