Chris Tonkinson
Chris Tonkinson

Reputation: 14459

How can I "dual" implode a nested array?

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

Answers (3)

salathe
salathe

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

Tom Haigh
Tom Haigh

Reputation: 57815

Here is a really dirty way:

str_replace('],[', '|', trim(json_encode($a), '[]'));

Upvotes: 5

dev-null-dweller
dev-null-dweller

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

Related Questions