2015-07-21 3 views
0

Это то, что мои данные выглядитгрупповых объектов на основе их значения атрибутов

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

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

$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

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

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; 
} 
Смежные вопросы