【问题标题】: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() 的答案,还有另一层——注意它是一个二维数组。
  • @hakre 对这个问题的模糊记忆和 3 或 4 个直接的 implode() 在最终被编辑或删除之前。我想我已经在本周至少将一些与“扁平化”问题联系起来了,所以这里还有一个。
  • 是的,只是在编辑 PHP5 标记时偶然发现,然后想知道没有欺骗然后看到您的评论;)

标签: php arrays list comma


【解决方案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】:

          这里有一些额外的技术可以添加到这个堆中......

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

          2. 使用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
          

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

          【讨论】:

            猜你喜欢
            • 2018-08-07
            • 1970-01-01
            • 1970-01-01
            • 2020-06-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-03
            • 2011-08-13
            相关资源
            最近更新 更多