Allora, $valore_variabile è: foreach($array as $variabile => $valore_variabile).
$campi non è un array, è semplicemente una scritta, che parte come vuota e che aggiunge valori al suo interno se gli array soddisfano una certa condizione.
$fine invece è uno spazio vuoto.
Rispondendo alla tua domanda $capi non deve diventare un array, ma semplicemente disporre il contenuto dell'array che supera le condizioni precedenti come una frase(devono diventare gli elementi di una query, l'unico problema è che non riconoscendol'ultimo elemento lascia una virgola di troppo e non esegue la query).
L'array è generato dai dati di una form, che vengono presi tipo post, esempio:
codice:
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$array = array('nome' => "$nome", 'cognome' => "$cognome");
Successivamente faccio un foreach con un unset sui valori che vengono passati nulli per toglierli dalla query(nella form alcuni campi sono disabled se riempiti, quindi il valore che passano è sempre nullo).
Ultimo associo gli elementi per passarli alla query:
Codice PHP:
foreach ($array as $valore => $valore_variabile){
    if(
$valore_variabile != ''){
        if(!
array_pop($valore)){
            
$campi.= "$valore='$valore_variabile', ";
        }else{
            
$campi.= "$valore='$valore_variabile' ";            
            }
        }
    } 
Ho riscritto tutto così come l'ho creato, ho cambiato i nomi di alcune variabili per far capire meglio. Ultima cosa: ho stampato i valori degli array e sono corretti, quindi l'errore è dentro il ciclo che non riesce a distringuere qual'è l'ultimo elemento passato.