PHP/JS:删除分隔列表中的最后一个逗号
PHP/JS: Removing final comma in a delimited list
在典型的for循环中生成逗号交付列表时,消除最后一个逗号的最佳、最简洁的编码实践是什么?这种情况经常出现,我无法忍受为这么简单的事情写这么多额外的代码行。。。必须有更好的技术/模式。
foreach ($list as $item)
{
echo "'".$item . "',";
}
除了最后一次迭代之外,让上面的代码在任何地方都产生逗号的最佳方法是什么(使用PHP和/或JS(?
现在我正在做这样的事情:
$total = count($images);
$i=0;
foreach ($list as $item)
{
$i++;
echo "'".$item."'";
if ($i<$total) echo ',';
}
但这为如此简单的事情添加了四行代码。。。
标准PHP库(SPL(提供了一个方便的类CachingIterator
,可以用来查看是否还有其他项需要迭代。以下内容可能没有您希望的那么简洁,但它是灵活的(即,可以用于远远不止数组(。
$array = range('a', 'g');
$cache = new CachingIterator(new ArrayIterator($array));
foreach ($cache as $item) {
echo "'$item'";
if ($cache->hasNext()) {
echo ',';
}
}
上面的例子输出
'a','b','c','d','e','f','g'
如果您没有简化代码示例:
echo implode(',', $list);
执行(另请参阅implode
PHP手册(。
如果foreach
循环中有更多的代码,您需要跟踪是否在最后一个元素上,并处理这种情况:
$count = count($list);
$current = 0;
foreach ($list as $item)
{
$current++;
$notLast = $current !== $count;
echo $item;
if ($notLast) echo ',';
}
编辑:在我回答这个问题后,你在问题中添加了一个类似的代码,所以如果这对你的编码手指来说太麻烦了,尤其是(而且可以理解(你不想整天重复这样的代码,你需要将其封装以供重复使用。一种解决方案是在一个可重复使用的迭代器中实现这一点:
$list = array('a', 'b', 'c');
class PositionKnowingIterator implements iterator
{
/**
* @var iterator
*/
private $inner;
private $count;
private $index;
public function __construct(array $list) {
// NOTE: implement more iterators / objects to deal with in here
// if you like. This constructor limits it to arrays but
// more is possible.
$this->count = count($list);
$this->inner = new ArrayIterator($list);
}
/* SPL iterator implementation */
public function current() {
return $this->inner->current();
}
public function next() {
$this->index++;
$this->inner->next();
}
public function key() {
$this->inner->key();
}
public function rewind() {
$this->index = 1;
$this->inner->rewind();
}
public function valid() {
return $this->inner->valid();
}
/* Position Knowing */
public function isLast() {
return $this->index === $this->count;
}
public function notLast() {
return !$this->isLast();
}
public function isFirst() {
return $this->index === 1;
}
public function notFirst() {
return !$this->isFirst();
}
public function isInside() {
return $this->notFirst() && $this->notLast();
}
}
foreach($iterator = new PositionKnowingIterator($list) as $item)
{
echo "'".$item."'", $iterator->notLast() ? ',' : '';
}
echo implode(",", $list);
不使用foreach所需的
用户内爆((函数来实现这一点。有时还需要添加一些内容,例如引用SQL字段的值:
$fields = '"' . join('", "', $values) . '"';
对于JavaScript使用Array.join()
方法(W3C(:
var implodedString = someArray.join(',')
如果我说得对,您可以使用内爆函数。这是为你做的工作。
BR,
TJ
为什么不:
echo implode(",", $list);
常用的做法:使用'join'函数或其类似函数。这个函数几乎存在于每种语言中,所以它是最简单、最清晰、最独立于环境的方法。
echo join(", ", $list);
相关文章:
- 将同一个元素追加到两个下拉列表中只会导致最后一个元素被追加
- Jquery幻灯片中的列表,连接第一个和最后一个列表元素以创建旋转木马
- 默认情况下,在 angularjs 中选择下拉列表中的最后一个位置显示占位符
- jQuery:隐藏按钮,直到选择最后一个下拉列表
- 打开的模型框从列表中获取最后一个值
- 从下拉列表中选择最后一个值,然后对其他下拉列表禁用它
- 如何获取从下拉列表中选择的最后一个值并使用 jquery 禁用它
- Bootstrap 3.0:如何使垂直导航栏下拉列表不附加到最后一个列表项
- 我想在下拉列表的最后一个选项被选中时提交表单.选项是动态生成的
- 在最后一个位置的下一个位置插入列表元素
- 试图从无序列表中获取最后一个元素
- 如何添加一个类列表,并且只在JavaScript中显示最后一个类
- 如何使用JSON-LD标记面包屑列表中的最后一个非链接项
- 在循环功能后的最后一个列表项上停止
- 最后一个列表项未切换
- JQuery从每个列表行克隆最后一个元素
- 如何使用javascript/jquery检测最后一个或第一个列表项是否显示在其容器中
- 动态列表的最后一个按钮并不总是用jQuery触发点击事件
- 如何将下拉列表中的最后一个选项设置为使用D3.js选择
- 使用这个正则表达式,为什么它只捕获最后一个列表项?