Credo di avere capito dove è l'errore ma non so come risolverlo

codice:
$text = sprintf($posizioni, $campi);
vuole tanti paramentri dopo "$posizioni" quanto sono quelli presenti in $posizione.

Per cui se la variabile $posizione è formata di 4 parametri, il codice dovrà essere

codice:
$text = sprintf($posizioni, $campo1, $campo2, $campo3, $campo4);
E non basta mettere una SOLA variabile che abbia una struttura del tipo

codice:
$variabile = "$dato1, $dato2, $dato3"
perché per la funzione è sempre e solo una variabile. Non so proprio come fare proprio perché il numero di variabili non è fisso ma dipende da quanti valori NON sono vuoti ...