<?php
$rows = array(
              array('id'=>1,'item_name'=> 'item name 01','item_group_id'=> 101),
              array('id'=>2,'item_name'=> 'item name 02','item_group_id'=> 105),
              array('id'=>3,'item_name'=> 'item name 03','item_group_id'=> 101),
              array('id'=>4,'item_name'=> 'item name 04','item_group_id'=> 104),
              array('id'=>5,'item_name'=> 'item name 05','item_group_id'=> 103),
              array('id'=>6,'item_name'=> 'item name 06','item_group_id'=> 105),
              array('id'=>7,'item_name'=> 'item name 07','item_group_id'=> 104),
              array('id'=>8,'item_name'=> 'item name 08','item_group_id'=> 105),
              array('id'=>9,'item_name'=> 'item name 09','item_group_id'=> 102),
              array('id'=>10,'item_name'=> 'item name 10','item_group_id'=> 101),
              array('id'=>11,'item_name'=> 'item name 11','item_group_id'=> 105)
              );

$data = array();
foreach ($rows as $row) {
    $group_id = $row['item_group_id'];
    if (isset($data[$group_id])) {
        $data[$group_id]['names'][] = $row['item_name'];
        $data[$group_id]['count']++;
    } else {
        $data[$group_id] = array('names' => array($row['item_name']), 'count' => 1);
    }
}

$divisor = count($data);
echo "<table border='1'>\n";
while (!empty($data)) {
    foreach ($data as $group_id => &$subarray) {
        $group_size = max(round($subarray['count']/$divisor), 1);
        $group = array_splice($subarray['names'], 0, $group_size);
        foreach ($group as $name) {
            echo "<tr><td>$group_id</td><td>$name</td></tr>\n";
        }
        if (empty($subarray['names'])) {
            unset($data[$group_id]);
        }
    }
}
echo '</table>';

// your code goes here