группировать объекты на основе значений их атрибутов

Вот как выглядят мои данные

array (size=2)


0 =>
array (size=6)
'name' => string 'A new event' (length=11)
'start_time' => string '2015' (length=4)
'end_time' => string '2015' (length=4)
'subscription_start_time' => string '2015' (length=4)
'subscription_end_time' => string '2015' (length=4)
'capacity' => string '5' (length=1)
1 =>
array (size=6)
'name' => string 'A new event 2' (length=13)
'start_time' => string '2015' (length=4)
'end_time' => string '2015' (length=4)
'subscription_start_time' => string '2015' (length=4)
'subscription_end_time' => string '2015' (length=4)
'capacity' => string '5' (length=1)

Теперь посмотрим start_time свойство в обоих объектах .. Я хочу сгруппировать все объекты с одинаковыми start_time поэтому, когда я получаю данные примерно из 100 таких объектов, я могу пройти через них и поместить все объекты с одинаковыми start_time в одном массиве объектов в объекте …

Я знаю, что это будет простой цикл foreach, но это было так давно, так как я имел дело с группировкой объектов, так что теперь это сбивает меня с толку. Любая помощь ?

0

Решение

Попробуйте следующее.

function groupBy($array, $key) {
$groupedData = [];
foreach ($array as $value) {
if ( ! array_key_exists($value[$key], $groupedData)) {
$groupedData[$value[$key]] = [];
}
$groupedData[$value[$key]][] = $value;
}
return $groupedData;
}
0

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

Это то, что я в конечном итоге написал
Работает отлично

$all_grouped_events = array_fill(0, sizeof($modelEvent->all_events)-1 , array());
$current_time = $modelEvent->all_events[0]['start_time'];

foreach ($modelEvent->all_events as $event)
{
if($modelEvent->all_events[$count]['start_time'] == $current_time)
{
array_push($all_grouped_events[$curr_count], $event);
$count++;
}
else
{
$curr_count = $count;
$current_time = $modelEvent->all_events[$count]['start_time'];
array_push($all_grouped_events[$curr_count], $event);
$count++;
}
}

Первая строка кода очень важна. array_push ожидает массив, в который должно быть помещено значение, поэтому, если мы создаем пустой массив и помещаем в него значения, он не будет работать, потому что мы будем обращаться к неопределенным индексам, поэтому первая строка кода инициализирует массив со всеми индексами (статические) и толкает массив в каждом индексе.

Вот как выглядят необходимые данные и что я хотел

array (size=2)


0 =>
array (size=1)
0 =>
array (size=6)
'name' => string 'A new event 3' (length=13)
'start_time' => string '2014' (length=4)
'end_time' => string '2015' (length=4)
'subscription_start_time' => string '2015' (length=4)
'subscription_end_time' => string '2015' (length=4)
'capacity' => string '5' (length=1)
1 =>
array (size=2)
0 =>
array (size=6)
'name' => string 'A new event' (length=11)
'start_time' => string '2015' (length=4)
'end_time' => string '2015' (length=4)
'subscription_start_time' => string '2015' (length=4)
'subscription_end_time' => string '2015' (length=4)
'capacity' => string '5' (length=1)
1 =>
array (size=6)
'name' => string 'A new event 2' (length=13)
'start_time' => string '2015' (length=4)
'end_time' => string '2015' (length=4)
'subscription_start_time' => string '2015' (length=4)
'subscription_end_time' => string '2015' (length=4)
'capacity' => string '5' (length=1)
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector