Remove query string specific key value

[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.