Reputation: 14459
I have a nested array (only one level deep) like this:
$a = array(
array( 1, 2, 3 ),
array( 2, 4, 6 ),
array( 5, 10, 15 )
);
And I'd like a nice way to implode() it to this form:
1,2,3|2,4,6|5,10,15
I can run a loop to implode(',',...)
each array in $a
(storing those strings in a temp), and then implode('|',...)
that temporary array, but it seems like I should be able to do this more concisely* with PHP.
Thanks in advance,
Cheers!
*By "more concisely" I mean, without writing a loop (so, just using function calls)
Upvotes: 5
Views: 2111
Reputation: 51950
I'm late to the game here (by SO standards) but you could literally "dual" implode.
implode('|', array_map('implode', array_fill(0, count($a), ','), $a))
Upvotes: 8
Reputation: 57815
Here is a really dirty way:
str_replace('],[', '|', trim(json_encode($a), '[]'));
Upvotes: 5
Reputation: 29462
function implodeComas($arr)
{
return implode(',',$arr);
}
$out = implode('|', array_map('implodeComas', $a));
echo $out;
Better one:
function myImplode($ret,$current)
{
if($ret)
$ret .= '|';
return $ret .= implode(',',$current);
}
echo array_reduce($a, 'myImplode');
Upvotes: 6