Concatenar array asociativo

A veces hecho de menos en PHP una función para concatenar arrays asociativos, algo parecido a la función http_build_query pero que permita especificar el texto a usar para concatenar cada par clave-valor en vez del = y también poder especificar el texto para concatenar el resultado en lugar de &.

Normalmente las soluciones que he visto para afrontar esta necesidad son iterativas así que tratando de hacer algo parecido con funciones nativas encontré una solución con las funciones vprintf, vsprintf y vfprintf.

Hay varios usos para este tipo de concatenaciones tales como generar encabezados HTTP, generar archivos YAML, archivos INI, etc.

  1. // Generar encabezados HTTP
  2. $glue = ": %s\r\n";
  3. $headers = [
  4.     'Content-Type' => 'text/html',
  5.     'Referer'      => 'http://www.joaquinfernandez.net/blog'
  6. ];
  7. // Escribimos las cabeceras en la salida estándar.
  8. vprintf(implode($glue, array_keys($headers)) . $glue, $headers);
  9.  
  10. // Generar archivo YAML
  11. $glue = ": \"%s\"\n";
  12. $values = [
  13.     'description' => 'Mi libro de apuntes',
  14.     'name'        => 'jfBlog'
  15. ];
  16. // Escribimos en el archivo.
  17. $yamlFile = fopen('/path/to/file.yml', 'w');
  18. vfprintf($yamlFile, implode($glue, array_keys($values)) . $glue, $values);
  19. fclose($yamlFile);