我正在将类对象推送到两个不同的数组上,然后想要采用不同的这些数组。但是,当我使用array_udiff的数组推送时,我无法使用array_udiff输出除null之外的任何内容。这是代码的准系统。
班级定义:
class follower
{
public $friend;
public $newposts;
}
数据分配:for循环包含:
$holder = new follower();
....put data in $holder....
array_push($object_array1, $holder);
第二个循环做同样的事情......
$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为null。除了上面的代码之外,我还尝试使用比较函数 - 使它成为类中的静态函数,或者在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
我做错了什么?
感谢您的任何建议。
答案 0 :(得分:0)
试试这个。小心数组实际包含的内容。
<?php
class follower {
public $friend;
public $newposts;
public function __construct($friend, $newpost) {
$this->friend = $friend;
$this->newposts = $newpost;
}
}
$object_array1 = array();
$holder = new follower('me', 'first');
array_push($object_array1, $holder);
$object_array2 = array();
$holder = new follower('you', 'second');
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');
var_dump($object_array);