数组中的逗号分隔列表
Posted
技术标签:
【中文标题】数组中的逗号分隔列表【英文标题】:Comma separated list from array 【发布时间】:2012-08-02 16:04:55 【问题描述】:我想知道如何:
制作逗号分隔列表 从列表中去掉最后一个逗号这是一个数组示例:
Array
(
[name] => Array
(
[0] => Some message to display1
)
[test] => Array
(
[0] => Some message to display2
)
[kudos] => Array
(
[0] => Some message to display3
)
)
我想这样显示:
逗号列表: Some message to display1, Some message to display2, Some message to display3
【问题讨论】:
implode(", ", $array);
对于所有仅针对implode()
的答案,还有另一层——注意它是一个二维数组。
@MichaelBerkowski:分而治之:How to “flatten” a multi-dimensional array to simple one in php?
@hakre 对这个问题的模糊记忆和 3 或 4 个直接的 implode()
在最终被编辑或删除之前。我想我已经在本周至少将一些与“扁平化”问题联系起来了,所以这里还有一个。
是的,只是在编辑 PHP5 标记时偶然发现,然后想知道没有欺骗然后看到您的评论;)
【参考方案1】:
在获得每个数组后循环遍历数组和implode()
。
$bigArray = array();
foreach($firstArray as $secondArray)
if(is_array($secondArray))
$bigArray = array_merge($bigArray, $secondArray);
$commaList = implode(",", $bigArray);
【讨论】:
而不是连接到一个字符串(并且必须处理尾随的逗号),而是将其推送到一个数组,然后将其内爆。 如果初始数组中的一个值不是数组,则会中断。【参考方案2】:所以,修改我的答案以实际解决您的问题,您可以使用这样的嵌套 foreach 循环来做到这一点:
<?php
$a1 = array(
'name' => array( 0 => 'Some message to display1'),
'test' => array( 0 => 'Some message to display2'),
'kudos' => array( 0 => 'Some message to display3'),
);
$final = "";
foreach($a1 as $innerarray)
foreach($innerarray as $message)
$final .= $message.", ";
echo substr($final,0,-2);
?>
【讨论】:
【参考方案3】:您可以使用implode
连接值并使用array_map
提取它们:
// this should be your array
$youArray = array();
// return first elements
$values = array_map(function($item) return $item[0]; , $youArray);
// echo joined values
echo implode(',', $values);
【讨论】:
【参考方案4】:$array = array("some text","other text");
$impl = implode(",", $array);
echo $impl;
【讨论】:
【参考方案5】:implode
适用于一维数组,但您有一个二维数组,这需要更多的工作。
您可以使用array_map
来展平数组
$flatArray = array_map(function($a)
// I implode here just in case the arrays
// have more than one element, if it's just one
// you can return '$a[0];' instead
return implode(',', $a);
, $array);
echo implode(',', $flatArray);
【讨论】:
【参考方案6】:这适用于您的数组,并且应该适用于 n 层深的数组:
$array = array(
'name' => array('Some message to display1'),
'test' => array('Some message to display2'),
'kudos' => array('Some message to display3')
);
$mystr = multi_join($array);
while (substr($mystr, -1) == ',')
$mystr = substr($mystr, 0, -1);
echo $mystr;
function multi_join($value)
$string = '';
if (is_array($value))
foreach ($value as $el)
$string.= multi_join($el);
else
$string.= $value.',';
return $string;
【讨论】:
而不是连接到一个字符串(并且必须处理尾随的逗号),而是将其推送到一个数组,然后将其内爆。【参考方案7】:这里有一些额外的技术可以添加到这个堆中......
重新索引第一层,因为 splat 运算符不喜欢关联键,然后合并解压缩的子数组,然后内爆。
使用array_reduce()
迭代第一级并从每个子数组中提取第一个元素,在不使用implode()
的情况下根据需要进行分隔。
代码:(Demo)
$array = [
'name' => ['Some message to display1'],
'test' => ['Some message to display2'],
'kudos' => ['Some message to display3']
];
echo implode(', ', array_merge(...array_values($array)));
echo "\n---\n";
echo array_reduce($array, function($carry, $item) return $carry .= ($carry ? ', ' : '') . $item[0]; , '');
输出:
Some message to display1, Some message to display2, Some message to display3
---
Some message to display1, Some message to display2, Some message to display3
第一种技术将容纳子数组中的多个元素,第二种技术不会确认每个子数组超过一个“消息”。
【讨论】:
以上是关于数组中的逗号分隔列表的主要内容,如果未能解决你的问题,请参考以下文章