I assumed a few things about your question. Like, I assumed that the data comes out already sorted properly and doesn't require any additional sorting. I also overlooked that your select inputs have empty name attributes. But this code might do something close to what you want.
<?php
$my_array = array(
"0" => array(
"id" => 1,
"lang_id" => 1,
"name" => "attr one",
"attribute_group_id" => 1,
"sort_order" => 1,
"in_use" => 1
),
"1" => array(
"id" => 2,
"lang_id" => 1,
"name" => "attr two",
"attribute_group_id" => 1,
"sort_order" => 2,
"in_use" => 0
),
"2" => array(
"id" => 3,
"lang_id" => 1,
"name" => "attr three",
"attribute_group_id" => 1,
"sort_order" => 3,
"in_use" => 0
),
"3" => array(
"id" => 4,
"lang_id" => 1,
"name" => "attr four",
"attribute_group_id" => 2,
"sort_order" => 1,
"in_use" => 1
)
);
foreach($my_array as $key => $arr) {
$my_array[$key] = (object)$arr;
}
$prev_attr_group_id = NULL;
echo '<select name="">' . "\n";
foreach($my_array as $obj) {
$agid = $obj->attribute_group_id;
if (!is_null($prev_attr_group_id) && $agid != $prev_attr_group_id) {
echo '</select>' . "\n";
echo '<select name="">' . "\n";
}
echo ' <option value="' . $obj->id . '">' . $obj->name . '</option>' . "\n";
$prev_attr_group_id = $agid;
}
echo '</select>' . "\n";