array_push & amp; array_udiff с объектами пользовательских классов

Я помещаю объекты класса в два разных массива, а затем хочу взять разные из этих массивов. Тем не менее, когда я использую массив push с array_udiff, я не могу получить array_udiff для вывода чего-либо, кроме null. Вот скелет кода.

Определение класса:

class follower
{
public $friend;
public $newposts;

}

Назначение данных: для цикла, содержащего:

        $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 равен нулю. В дополнение к приведенному выше коду я попытался поиграться с функцией сравнения — сделать ее статической функцией в классе или объявить ее как неназванную функцию в вызове 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');

Проблема с этим последним рабочим подходом состоит в том, что он дает словарь объектов, а не массив объектов — мне нужен массив.

Вот некоторые вопросы стекового потока, которые актуальны, но не решают эту проблему: array_udiff не работает должным образом, Как работает array_udiff ()?, пересечение массива для массива объектов php.
Вот документация для этого класса (http://php.net/manual/en/function.array-udiff.php

Что я делаю неправильно?

Спасибо за любые предложения.

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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]