Если вы хотите сделать один проход в массиве, сначала сортируйте (технически, это тоже проход!), А затем проверяйте изменения в siteid, когда вы просматриваете его. Вот как вы можете отсортировать массив по siteid перед его циклом:
$sections = array(
array('id'=>1, 'siteid'=>1, 'section'=>'posts'),
array('id'=>2, 'siteid'=>2, 'section'=>'posts'),
array('id'=>3, 'siteid'=>1, 'section'=>'aboutme'),
array('id'=>4, 'siteid'=>1, 'section'=>'contact'),
array('id'=>5, 'siteid'=>2, 'section'=>'questions'),
);
usort($sections, 'sortBySiteId');
function sortBySiteId($a, $b)
{
if ($a['siteid'] == $b['siteid']) {
return 0;
}
return ($a['siteid'] < $b['siteid']) ? -1 : 1;
}