【问题标题】:How to remove comma in while loop? [duplicate]如何在while循环中删除逗号? [复制]
【发布时间】: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 删除最后一个逗号,还是有更好的解决方案。如果我把它放在变量中,我个人认为这不是一个好的解决方案。请务必回复。

更新:问题不仅仅是删除最后一个字符,而是包含一个锚标记,如果我将其存储在变量中,那么它不会创建超文本。喜欢

Google

但是存入变量后,结果是这样的:

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 上是重复的。

标签: php wordpress


【解决方案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,好吧,那么这个答案就是垃圾,
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多