Пересечение массивов объектов

Статус
Закрыто для дальнейших ответов.
Регистрация
17.02.2012
Сообщения
28
Здравствуйте. Есть 2 массива объектов, ну например два одинаковых array([0]=>stdClass{[name]=>One}). Мне нужно найти их пересечение, использую array_intersec.Но выводит ошибку: Object of class stdClass could not be converted to string. Как избавиться от нее, подскажите плиз.

Заранее благодарю.
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Кошерная ошибка PHP гласит: Объект класса stdClass не может быть сконвертирован в строку.
Есть предложение попробовать сконвертировать все объекты в двух объектах в массив сначало, после конверта, вы пропускаете оба массива через это функцию, и только потом конвертируете массив в объект. Ясно? Или подробнее объеснить?
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
1. Используем:
Код:
function objectsIntoArray($arrObjData, $arrSkipIndices = array())
{
    $arrData = array();
   
    // if input is object, convert into array
    if (is_object($arrObjData)) {
	    $arrObjData = get_object_vars($arrObjData);
    }
   
    if (is_array($arrObjData)) {
	    foreach ($arrObjData as $index => $value) {
		    if (is_object($value) || is_array($value)) {
			    $value = objectsIntoArray($value, $arrSkipIndices); // recursive call
		    }
		    if (in_array($index, $arrSkipIndices)) {
			    continue;
		    }
		    $arrData[$index] = $value;
	    }
    }
    return $arrData;
}
2. Прыгаем от счастья ;)
 

Feast

Well-Known Member
Регистрация
12.05.2011
Сообщения
60
Вот если поглазеть на документацию функции array_intersec (например здесь на пхп.нет), то там можно увидеть примечение:

"Два элемента считаются одинаковыми тогда и только тогда, когда (string) $elem1 === (string) $elem2. Другими словами, когда их строковые представления идентичны."(c)

То есть элементы должны иметь строковое представление, а это не к объектам.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ