function array_unique_deep($array)
{
    $values = array();
    foreach ($array as $part) {
        if (is_array($part)) {
            $values = array_merge($values, array_unique_deep($part));
        } else {
            $values[] = $part;
        }
    }
    return array_unique($values);
}
function gen_contact_types($dbh, $case_id)
{
    // get default contact types for this ClinicCases installation
    $get_default_types = $dbh->prepare("SELECT type from cm_contacts_types ORDER BY type ASC");
    $get_default_types->execute();
    $default_types = $get_default_types->fetchAll(PDO::FETCH_ASSOC);
    // add any user-defined contact types
    $get_db_types = $dbh->prepare("SELECT DISTINCT type from  `cm_contacts` WHERE assoc_case = :case_id");
    $data = array('case_id' => $case_id);
    $get_db_types->execute($data);
    $db_types = $get_db_types->fetchAll(PDO::FETCH_ASSOC);
    //$custom_types = array_diff_assoc($default_types, $db_types);
    $all_types = array_unique_deep(array_merge($db_types, $default_types));
    $type_options = null;
    foreach ($all_types as $type) {
        $type_options .= "<option value = '{$type}'>{$type}</option>";
    }
    return $type_options;
}