[EDIT] This should work the way you wanted it to:
$marca = get_query_var('marca');
$marca_arg = isset($marca) && is_array($marca)
? $marca : [];
$url_base = remove_query_arg( 'marca' );
$n = count( $marca_arg );
foreach ($marcas_terms as $marca_term) {
$selected = in_array( $marca_term->slug, $marca_arg );
if ( $selected ) {
$marca_arg2 = array_diff( $marca_arg, [ $marca_term->slug ] );
// Rebuils the indexes. Just remove if not necessary.
$marca_arg3 = [];
foreach ( $marca_arg2 as $slug ) {
$marca_arg3[] = $slug;
}
$url = add_query_arg( 'marca', $marca_arg3, $url_base );
$marca_arg2 = $marca_arg3 = null;
} else {
$url = add_query_arg( 'marca[' . $n . ']', $marca_term->slug );
}
?>
<a href="https://wordpress.stackexchange.com/questions/298178/<?php echo esc_url( $url ); ?>" <?php echo $selected ? // wrapped
"class="selected"" : ''; ?>><?php echo $marca_term->name; ?></a>
<?php
} // End $marcas_terms loop.