如何在while循环中删除逗号? [复制]
Posted
技术标签:
【中文标题】如何在while循环中删除逗号? [复制]【英文标题】:How to remove comma in while loop? [duplicate] 【发布时间】:2018-06-24 20:43:53 【问题描述】:我正在使用如下的while循环:
<?php while(has_sub_field('available_locations')): ?>
<a href="<?php the_sub_field('location_url'); ?>"><?php the_sub_field('locations'); ?></a>,
<?php endwhile; ?>
问题是 Last Location 也有逗号。例如:
加利福尼亚州、德克萨斯州
但我想看起来像这样:
加利福尼亚州,得克萨斯州
由于这包含 html 和 PHP 代码,我应该存储在一个变量中并使用 rtrim 删除最后一个逗号,还是有更好的解决方案。如果我把它放在变量中,我个人认为这不是一个好的解决方案。请务必回复。
更新:问题不仅仅是删除最后一个字符,而是包含一个锚标记,如果我将其存储在变量中,那么它不会创建超文本。喜欢
但是存入变量后,结果是这样的:
https://www.google.co.in谷歌
【问题讨论】:
最终,您要么需要知道何时结束,要么将结果分配给数组,以便使用有限的值集。 我认为这不是一个重复的问题。问题不仅仅是删除最后一个字符,而是包含一个锚标记,如果我将其存储在变量中,它不会创建超文本。 显示“google.co.inGoogle”的HTML源代码。提供 dans la ou les régions suivantes : ctfrandev.com/fr/promotions/?regions=491Québec<a href="">
您可以确定这个问题与 SO 重复。我在蟋蟀,所以我无法帮助搜索。以变量作为空字符串开始。回应它。第一次迭代后,将变量覆盖为逗号。如此简单的任务在 SO 上是重复的。 【参考方案1】:使用PHP substr()
函数。
例子:
`substr("abcdef", 0, -1); // returns "abcde"`
因此,在您的情况下,将所有输出 HTML 代码收集到变量 $links
,然后使用 substr
截断最后一个字符并使用 echo
打印:
<?php
$links = '';
while(has_sub_field('available_locations'))
$links .= '<a href="'. the_sub_field('location_url') .'">'. the_sub_field('locations') .'</a>,';
echo substr($links, 0, -1);
?>
或者使用构建一个数组并使用implode()
<?php
$links = [];
while (has_sub_field('available_locations'))
$links[] = '<a href="'. the_sub_field('location_url') .'">'.the_sub_field('locations').'</a>';
echo implode(', ', $links);
?>
编辑 显然,用于生成 URL 的函数将其输出直接发送到导致 HTML 链接断开的浏览器。 为避免这种情况,请使用 PHP Output Control Functions 捕获输出并启用数据/字符串操作。
<?php
ob_start(); // Turn on output buffering
while(has_sub_field('available_locations'))
'<a href="'. the_sub_field('location_url') .'">'. the_sub_field('locations') .'</a>,';
$links = ob_get_contents(); // Get the contents of the output buffer
ob_end_clean(); // Clean (erase) the output buffer and turn off output buffering
echo substr($links, 0, -1); // removal of the last character, the comma.
?>
【讨论】:
@Scuzzy 击败了我的编辑,哦,好吧 +1 @LawrenceCherone 感谢您的更新!很高兴看到不同的方法具有相同的结果。 如果你疯了,你甚至可以用 ob_start() ob_end_clean() 来做。 ;p @LawrenceCherone 不,伙计们,它不起作用。它基本上删除了逗号,但它直接显示了网址。锚标记不起作用。 @ino 查看我对这个问题的更新。【参考方案2】:我认为您正在使用 ACF 插件,要修剪最后一个逗号,您可以将 rtrim()
函数与 ACF 的 get_sub_field()
一起使用或合并所有链接,如下所示。
<?php
$links = array();
while( has_sub_field( 'available_locations' ) )
$links[] = '<a href="'.get_sub_field('location_url').'">'.get_sub_field('locations').'</a>';
echo implode( ', ', $links );
?>
【讨论】:
【参考方案3】:一种选择是将所有字符串收集到一个数组中,然后使用 implode 将它们连接起来。
<?php
$links = array();
while( has_sub_field( 'available_locations' ) )
$links[] = '<a href="'.the_sub_field('location_url').'">'.the_sub_field('locations').'</a>';
echo implode( ', ', $links );
【讨论】:
会直接显示url。所以,它不工作。 啊,疯狂的 wordpress,好吧,那么这个答案就是垃圾,以上是关于如何在while循环中删除逗号? [复制]的主要内容,如果未能解决你的问题,请参考以下文章