I want to implode values in to a comma-separated string if they are an array:
I have the following array:
$my_array = [
\"keywords\" => \"test
Just create a new array and set the elements (-;
<?php
...
$new_array = [];
foreach ($my_array as $key => $value)
$new_array[$key] = is_array($value) ? implode(",", $value) : $value;
Just append values to new array:
$my_array = [
"keywords" => "test",
"locationId" => [ 0 => "1", 1 => "2"],
"industries" => "1",
];
$new_Array = [];
foreach ($my_array as $value) {
$new_Array[] = is_array($value) ? implode(",", $value) : $value;
}
print_r($new_Array);
And something that can be called a "one-liner"
$new_Array = array_reduce($my_array, function($t, $v) { $t[] = is_array($v) ? implode(",", $v) : $v; return $t; }, []);
Now compare both solutions and tell which is more readable.
You don't need to write/iterate a conditional statement if you type
the strings (non-arrays) as single-element arrays before imploding them.
With array_map()
: (Demo)
$my_array = [
"keywords" => "test",
"locationId" => [ 0 => "1", 1 => "2"],
"industries" => "1"
];
var_export(
array_map(
function($v) {
return implode(',', (array)$v);
},
$my_array
)
);
Or from PHP7.4, array_map()
with arrow function syntax: (Demo)
var_export(
array_map(fn($v) => implode(',', (array)$v), $my_array)
);
Or array_walk()
and modification by reference (Demo)
array_walk(
$my_array,
function(&$v) {
$v = implode(',', (array)$v);
}
);
var_export($my_array);
Or a foreach loop: (Demo)
foreach ($my_array as &$v) {
$v = implode(',', (array)$v);
}
var_export($my_array);
All snippets will output:
array (
'keywords' => 'test',
'locationId' => '1,2',
'industries' => '1',
)