Думаю, я бы просто использовал разделитель, например:
В форме
foreach (array(1,2) as $id) {
foreach (array(1,2,3) as $criteria) {
$key = $id . '_' . $criteria;
$options[$key] = "Your description for id $id, criteria $criteria";
}
}
$attributes = array('multiple' => 'multiple', 'size' => 10);
$form->addElement('select', 'criteria', get_string('criteria', 'component'), $options, $attributes);
Затем в результатах
$formdata = $mform->get_data();
...
$results = array();
foreach ($formdata->criteria[$key] as $key => $value) {
list($id, $criteria) = explode('_', $key);
$results[$id][$criteria] = $value;
}
Также для справки, Moodle имеет selectgroups
тип поля. Вам все еще нужно будет использовать уникальный ключ, но вы можете сгруппировать опции.
foreach (array(1,2) as $groupid) {
foreach (array(1,2,3) as $criteria) {
$key = $groupid . '_' . $criteria;
// Use a group.
$options[$groupid][$key] = "Your description for id $groupid, criteria $criteria";
}
}
$attributes = array('multiple' => 'multiple', 'size' => 10);
// Use selectgroups.
$form->addElement('selectgroups', 'criteria', get_string('criteria', 'component'), $options, $attributes);