如何从 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>
请注意 BMW
、Honda
或 Mercedes
后没有逗号。
根据您提供的示例代码,您所说的结果应该是通过以下方式生成的:
$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;
我有一个多维数组,我正在尝试添加逗号分隔符并删除每个数组中的最后一个逗号,我尝试了这个。
$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>
请注意 BMW
、Honda
或 Mercedes
后没有逗号。
根据您提供的示例代码,您所说的结果应该是通过以下方式生成的:
$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;