如何对嵌套数组执行“双重”implode操作?

5

我有一个嵌套数组(仅一层深度),像这样:

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

我希望有一个好的方法将它implode()成这种形式:

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

我可以使用循环来运行$a中每个数组的implode(',',...)(将这些字符串存储在一个临时变量中),然后在临时数组上运行implode('|',...),但是似乎我应该能够更简洁地使用PHP完成这个任务。
提前感谢您的帮助,祝好!
*“更简洁”指的是不使用循环(只使用函数调用)。

你想要这种自定义的扁平结构有什么原因吗?因为JSON和序列化的PHP都可以让你将复杂的数据结构转换成可解析的字符串。 - Peter Bailey
我正在为 Google Charts API 生成 URI。 - Chris Tonkinson
啊,这是个很好的理由!你看过gChartPhp吗?http://code.google.com/p/gchartphp/ - Peter Bailey
3个回答

8

我有点晚了(按照SO的标准),但你可以使用"双重"implode

implode('|', array_map('implode', array_fill(0, count($a), ','), $a))

@salathe 在这个 implode 之后,我得到了这种类型的数据...... valueA(1),valueB(1)|valueA(2),valueB(2),我需要将 valueA(1),valueA(2) 存储在一列中,将 valueB(1),valueB(2) 存储在第二列中,这是否可能? - Danish Iqbal
@DanishIqbal,请不要在评论中问随意的问题。 - salathe
@DanishIqbal,即使它与问题有些关联,但它并不是上面问题的一部分。即使您的问题相关,请不要在评论中提问 - salathe

6

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');

好主意。唯一的注意事项是,看起来array_reduce()会从数组的末尾剥离元素(反转输出中的子数组)。 - Chris Tonkinson

5

这里有一个非常不好的方法:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接