views:

122

answers:

3

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)

+7  A: 
dev-null-dweller
+1 great way to do it :)
Web Logic
Great idea. The only caveat is that it looks like array_reduce() strips elements from the back of the array (reversing the subarrays in the output).
Chris
+1  A: 

Here is a really dirty way:

str_replace('],[', '|', trim(json_encode($a), '[]'));
Tom Haigh
Dirty? Yes. But I really like it. Wish I could accept multiple answers.
Chris
+1  A: 

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))
salathe
/That's/ what I'm talking about!
Chris