数组中的逗号分隔列表

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

第一种技术将容纳子数组中的多个元素,第二种技术不会确认每个子数组超过一个“消息”。

【讨论】:

以上是关于数组中的逗号分隔列表的主要内容,如果未能解决你的问题,请参考以下文章

从 laravel/blade 中的数组创建逗号分隔列表?

需要来自 txt 文件的数据,以逗号分隔,以使用现有类中的对象填充数组列表

cfspreadsheet 在逗号分隔的行插入中转义逗号

从 C# 中的列表创建逗号分隔列表而不终止逗号

jQuery中的逗号分隔列表

如何从 SQL CE 中的表中构建逗号分隔列表?