Skip to content

Instantly share code, notes, and snippets.

@vluzrmos
Created April 30, 2020 19:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vluzrmos/620d8804bbaa5422b6bfa47c4813bd5d to your computer and use it in GitHub Desktop.
Save vluzrmos/620d8804bbaa5422b6bfa47c4813bd5d to your computer and use it in GitHub Desktop.
PHP Multipart array to Guzzle Client or other ...
<?php
/**
* Turns associative arrays into multipart [['name' => 'key[0][deep]', 'contents' => 'value']]
*/
function array_multipart(array $data = [])
{
$dots = array_dot($data);
$multipart = [];
foreach ($dots as $key => $content) {
$multipart[] = [
'name' => bracket_from_dots($key),
'contents' => $content
];
}
return $multipart;
}
/**
* Flatten a multi-dimensional associative array with dots.
*
* @param iterable $array
* @param string $prepend
* @return array
*/
function array_dot($array, $prepend = '')
{
$results = [];
foreach ($array as $key => $value) {
if (is_array($value) && ! empty($value)) {
$results = array_merge($results, array_dot($value, $prepend.$key.'.'));
} else {
$results[$prepend.$key] = $value;
}
}
return $results;
}
function bracket_from_dots($key)
{
$segments = explode('.', $key);
$result = array_shift($segments);
foreach ($segments as $name) {
$result .= "[{$name}]";
}
return $result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment