如何从 foreach 中的每个数组中删除最后一个逗号?

How to remove last comma from each array in foreach?

我有一个多维数组,我正在尝试添加逗号分隔符并删除每个数组中的最后一个逗号,我尝试了这个。

$cars=array("Volvo","BMW","Toyota","Honda","Mercedes");
$chunks =(array_chunk($cars,2));
foreach ($chunks as $key) {
    echo "<ul>";
    $data = array();
    foreach ($key as $value) {
        $data[] ="<li>".$value."</li>".",";
    }
    rtrim($data, ",");
    echo "</ul>";
}
foreach ($data as $key ) {
    echo $key;
}

预期输出:

<ul>
    <li>Volvo,</li><li>BMW</li>
</ul>
<ul>
    <li>Toyota,</li><li>Honda</li>
</ul>
<ul>
    <li>Mercedes</li>
</ul>

请注意 BMWHondaMercedes 后没有逗号。

根据您提供的示例代码,您所说的结果应该是通过以下方式生成的:

$cars   = array( "Volvo","BMW","Toyota","Honda","Mercedes" );
$chunks = array_chunk( $cars, 2 );

for ( $i = 0; $i < count( $chunks ); ++$i ) {
    for ( $j = 0; $j + 1 < count( $chunks[ $i ] ); ++$j ) {
        $chunks[ $i ][ $j ] .= ',';
    }
}

现在 $chunks 包含您在评论中所说的多维数组以及每个非最后一个元素的评论。

这是一个使用 array_splice() 而不是 array_chunk() 的更简单的方法。没有 count() 调用,没有递增计数器,只有一个循环。

代码:(Demo)

$cars=array( "Volvo","BMW","Toyota","Honda","Mercedes");
while($cars){                             // while there are still elements in the array...
    $chunk=array_splice($cars,0,2);       // extract first two elements (reducing $cars)
    if(isset($chunk[1])){$chunk[0].=',';} // add comma to 1st element if 2nd element exists
    $output[]=$chunk;                     // add extracted elements to multi-dim output
}
var_export($output);

输出:

array (
  0 => 
  array (
    0 => 'Volvo,',
    1 => 'BMW',
  ),
  1 => 
  array (
    0 => 'Toyota,',
    1 => 'Honda',
  ),
  2 => 
  array (
    0 => 'Mercedes',
  ),
)

无序列表的实现甚至更简单——只需将逗号添加到 implode() 调用中的连接字符串 </li><li>,</li><li>。这也提高了代码的通用性,具有更大的 "chunks"。 (而我的第一个代码仅适用于具有两个元素的子数组。)

代码:(Demo)

$cars=array( "Volvo","BMW","Toyota","Honda","Mercedes");
while($cars){
    $chunk=array_splice($cars,0,2);
    echo "<ul><li>",implode(",</li><li>",$chunk),"</li></ul>";  // add comma to implode's glue string
}

输出:

<ul>
    <li>Volvo,</li><li>BMW</li>
</ul>
<ul>
    <li>Toyota,</li><li>Honda</li>
</ul>
<ul>
    <li>Mercedes</li>
</ul>

假设您在视图文件中这样做,您可以这样做:

$cars=array("Volvo","BMW","Toyota","Honda","Mercedes");

foreach (array_chunk($cars,2) as $chunk) {
    echo '<ul>', PHP_EOL;

    $keys = array_keys($chunk);
    $lastKey = array_pop($keys);
    foreach ($chunk as $key => $car) {
        echo '    ', '<li>', $car, $key !== $lastKey ? ',' : '', '</li>', PHP_EOL; 
    }

    echo '<ul>', PHP_EOL;
}

所以基本上我们在处理每个块之前找到最后一个键,所以我们可以确定是否附加逗号。注意,像 PHP_EOL' ' 这样的东西只是为了格式化而添加的,应该被删除。

这里是working demo

虽然这种方法在视图中很好,但对于其他事情,最好先格式化数据然后再显示它(即你不应该在遍历数据时回显)。有点实用的例子是:

$cars=array("Volvo","BMW","Toyota","Honda","Mercedes");

$result = implode('', array_map(function ($items) { 
    $list = implode(',</li><li>', $items);

    return "<ul><li>$list</li></ul>";
}, array_chunk($cars,2)));

echo $result;