У меня проблемы с группировкой массива, возвращенного из запроса SOQL.
Содержимое массива выглядит следующим образом (это урезанная версия, чтобы дать представление о структуре):
QueryResult Object
(
[queryLocator] =>
[done] => 1
[records] => Array
(
[0] => stdClass Object
(
[Id] =>
[Contact] => 003b000000Ii7HcAAJ
[Session] => stdClass Object
(
[Id] =>
[Name] => Future Leaders (Day1)
)
)
[1] => stdClass Object
(
[Id] =>
[Contact] => 003b000000Ii6jtAAB
[Session] => stdClass Object
(
[Id] =>
[Name] => Future Leaders Program (Day1)
)
)
[2] => stdClass Object
(
[Id] =>
[Contact] => 003b000000Ii7MIAAZ
[Session] => stdClass Object
(
[Id] =>
[Name] => Future Leaders Program (Day2)
)
)
[3] => stdClass Object
(
[Id] =>
[Contact] => 003b000000KL4G4AAL
[Session] => stdClass Object
(
[Id] =>
[Name] => Utilities Chat
)
)
[4] => stdClass Object
(
[Id] =>
[Contact] => 003b000000Ii62fAAB
[Session] => stdClass Object
(
[Id] =>
[Name] => Working Group Update
)
)
)
Проблема в том, что запрос возвращает дубликаты контактов и дубликаты сеансов, поэтому я хочу отсортировать их в новый массив с различными контактами и всеми сеансами, связанными с контактом. Это запрос SOQL, поэтому я не могу выбрать SELECT DISTINCT, а GROUP BY не дает правильных результатов.
Любая помощь будет очень признательна, так как мои навыки PHP очень ржавые!
Одна проблема в том, что у вас есть массив объектов. Вы смешиваете массивы и объекты. Для ваших нужд я бы пошагово прошел через массив записей и создал новый массив с контактом в качестве ключа и сессиями в виде массива объектов для каждого ключа.
$contacts = array();
foreach($records as $record)
{
if(!exists($contacts[$record->Contact]))
$contacts[$record->Contact] = array();
$contacts[$record->Contact][] = $record->Session;
}
Других решений пока нет …