array_push& array_udiff包含自定义类对象

时间:2014-11-14 17:55:37

标签: php arrays class dynamic-arrays

我正在将类对象推送到两个不同的数组上,然后想要采用不同的这些数组。但是,当我使用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 expectedHow does array_udiff() work?array intersect for object array php。 以下是此课程的文档(http://php.net/manual/en/function.array-udiff.php

我做错了什么?

感谢您的任何建议。

1 个答案:

答案 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);