Как я могу "двойной" взорвать вложенный массив? - PullRequest
5 голосов
/ 21 мая 2010

У меня есть вложенный массив (только на один уровень глубиной), например:

$a = array(
  array( 1, 2, 3 ),
  array( 2, 4, 6 ),
  array( 5, 10, 15 )
  );

И я бы хотел, чтобы хороший способ () взялся за это в этой форме:

1,2,3|2,4,6|5,10,15

Я могу запустить цикл для implode(',',...) каждого массива в $a (сохраняя эти строки во временной области), а затем implode('|',...) этого временного массива, но, похоже, я должен быть в состоянии сделать это более кратко * с PHP.

Заранее спасибо,
Ура! * * 1013

* Под «более кратко» я имею в виду, не записывая цикл (то есть просто используя вызовы функций)

Ответы [ 3 ]

8 голосов
/ 21 мая 2010

Я опаздываю к игре здесь (по стандартам SO), но вы можете буквально "двойной" взорваться .

implode('|', array_map('implode', array_fill(0, count($a), ','), $a))
6 голосов
/ 21 мая 2010

function implodeComas($arr)
{
    return implode(',',$arr);
}
$out = implode('|', array_map('implodeComas', $a));

echo $out;

Лучше один:

function myImplode($ret,$current)
{
    if($ret)
        $ret .= '|';

    return $ret .= implode(',',$current);
}

echo array_reduce($a, 'myImplode');
5 голосов
/ 21 мая 2010

Вот очень грязный способ:

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