【发布时间】:2014-11-14 17:55:37
【问题描述】:
我将类对象推送到两个不同的数组上,然后想要获取这些数组中的不同。但是,当我将数组推送与 array_udiff 一起使用时,我无法让 array_udiff 输出除 null 之外的任何内容。这是代码的准系统。
类定义:
class follower
{
public $friend;
public $newposts;
}
数据赋值:for循环包含:
$holder = new follower();
....put data in $holder....
array_push($object_array1, $holder);
第二个for循环做同样的事情......
$holder = new follower();
....put data in $holder....
array_push($object_array2, $holder);
比较对象数组中的对象的功能:
function compare_followers($f1, $f2)
{
$s1 = $f1->friend;
$s2 = $f2->friend;
return strcmp($s1, $s2);
}
最后尝试比较这两个数组没有成功(数组看起来应该是,跟随者对象的数组)
$object_array = array_udiff($object_array2, $object_array1, 'compare_followers');
$object_array 为空。除了上面的代码之外,我还尝试使用比较函数——将其设为类中的静态函数或在 array_udiff 调用中将其声明为未命名函数,但这些都不起作用。
如果我将 compare_followers 应用于个别班级成员,那效果很好。同样,如果我将以下对象推送到我的 $object_array1 和 $object_array2 上,array_udiff 工作正常:
$holderA = array(
'friend' =>$holder->friend,
'newposts' => $holder->newposts
);
array_push($object_array2, $holder); (and same for $object_array1)
$object_array = array_udiff($object_array2, $object_array1, 'compare_followers');
后一种工作方法的问题在于它提供了一个对象字典而不是一个对象数组——我需要一个数组。
以下是一些相关但未解决的 stackoverflow 问题:array_udiff not working as expected、How does array_udiff() work?、array intersect for object array php。 这是此类的文档 (http://php.net/manual/en/function.array-udiff.php
我做错了什么?
感谢您的任何建议。
【问题讨论】:
-
你试过调试你的
compare_followers函数吗?尝试输出$f1、$f2、$s1、$s2和 strcmp($s1, $s2) 的输出,并确保它返回一个对array_udiff有意义的值 -
嗨 Nico,是的,我已经这样做了。我可以比较数组的元素以及各个跟随者对象,并且输出应该是这样的。另外,为了简单起见,我还尝试让 compare_followers 始终返回 1 或始终返回 0,但在我上面的代码中,array_udiff 的输出始终为 nil。
标签: php arrays class dynamic-arrays