繁体   English   中英

逗号分隔列表与数组

[英]Comma separated list from array

我想知道如何:

  • 制作以逗号分隔的列表
  • 从列表中删除最后一个逗号

这是一个数组示例:

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()

$bigArray = array();
foreach($firstArray as $secondArray){
    if(is_array($secondArray)){
        $bigArray = array_merge($bigArray, $secondArray);
    }
}
$commaList = implode(",", $bigArray);

因此,修改我的答案以实际解决您的问题,您可以使用嵌套的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);
?>

您可以使用implode array_map值,并使用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);
$array = array("some text","other text");
$impl = implode(",", $array);
echo $impl;

implode适用于1D阵列,但是您有2D阵列,这将需要更多的工作。

您可以使用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);

这适用于您的数组,并且应适用于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;
}

这是添加到此堆的一些其他技术...

  1. 重新索引第一级索引,因为splat运算符不喜欢关联键,然后合并解压缩的子数组并内爆。

  2. 使用array_reduce()迭代第一级并从每个子数组中提取第一个元素,根据需要定界而不使用implode()

代码:( 演示

$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

第一种技术将在子阵列中容纳多个元素,第二种技术不会在每个子阵列中确认多个“消息”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM