【问题标题】:Remove duplicate phrases in a foreach loop删除 foreach 循环中的重复短语
【发布时间】:2013-08-23 11:03:08
【问题描述】:

我有以下问题:

在我的 Wordpress 3.6 中,我有一个名为“主题”的自定义字段用于发布帖子。 该字段由 RSS 自动填充来自另一个网站的短语,并添加多个条件。它是这样填写的:“Cars,Bikes,Stuff,Gadget”

当我使用 get_posts 查询 wordpress 时,我会进入我的 foreach 循环:

Cars,Bikes,Stuff,Gadget
Cars,Bikes
Bikes,Stuff
Gadget

我把它放到一个字符串中并替换一些东西:

$topic_filter = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => 'private',
 )
);
$search_topic = array(' ', '-&-', '-|-', '-/-', '---');
$replace_topic = array("-", "-", "-", "-", "-", "");

foreach ($topic_filter as $post_topic) {
$str = str_replace($search_topic, $replace_topic, get_post_meta($post_topic->ID,     'topic', true));

echo $str;

}

最终的 echo putput 是:

Cars,Bikes,Stuff,Gadget,Cars,Bikes,Bikes,Stuff,Gadget

到目前为止一切顺利。但是现在如何删除重复项?

我尝试了 implode/explode,但它没有做任何事情,因为我认为这些项目在一个 foreach 循环中,并且它只适用于每个帖子。

但我需要 foreach 循环,因为最终的目标是将这个清理过的字符串作为一个列表在 html 输出中得到,如下所示:

<input
  type="button"
  value="Cars"
  class="filter-button"

  data-control-type="button-filter"
  data-control-action="filter"
  data-control-name="Cars-btn" 
  data-path=".Cars" 
/>
<input
  type="button"
  value="Bikes"
  class="filter-button"

  data-control-type="button-filter"
  data-control-action="filter"
  data-control-name="Bikes-btn" 
  data-path=".Bikes" 
/>
<input
  type="button"
  value="Gadget"
  class="filter-button"

  data-control-type="button-filter"
  data-control-action="filter"
  data-control-name="Gadget-btn" 
  data-path=".Gadget" 
/>

对我来说似乎很复杂:-(

有什么想法吗?我会很高兴得到您的帮助!

谢谢!

【问题讨论】:

    标签: php wordpress foreach duplicates explode


    【解决方案1】:

    使用array_unique:

    $str = "Cars,Bikes,Stuff,Gadget,Cars,Bikes,Bikes,Stuff,Gadget";
    $r = explode(",", $str);
    $unique = array_unique($r);
    $new_str = implode(",", $unique);
    

    【讨论】:

    • 谢谢,但 array_unique 也不起作用,我仍然从 wordpress 中得到一个包含所有重复项的列表:“Cars,Bikes,Stuff,Gadget,Cars,Bikes,Bikes,Stuff,Gadget”也许从 foreach 中得到结果,而不是在重新编辑之后?似乎他仍然只按帖子工作,而不是全局工作。
    • 看来问题是在使用第一步时 $r = explode(",", $str);失败,因为当我只是回显这个时,它会输出: Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, ... 这似乎无法正常工作,或者?有没有其他的爆炸方式?
    • 呵呵..你确定$str是你认为的那样吗?你能做一个var_dump(而不是echo)吗?
    • 好的,我发现了我的第一个错误:我没有先初始化数组。但是现在我将每个 post_field 都放在一个数组中:数组( [0] => Cars,Bikes,Stuff,Gadget [1] => Cars,Bikes [2] => Bikes,Stuff )。这是通过以下代码完成的: $items = array(); foreach ($topic_filter as $post_topic) { $str = '' . str_replace($search_topic, $replace_topic, get_post_meta($post_topic->ID, 'topic', true)) 。 ''; $items[] = $str; } print_r($items); ...所以我需要先从 foreach 循环中提取最终的字符串,而不是你的第一个代码可以工作,还是我错了? :)
    • ok var_dump 让我更进一步。现在我有一个干净的 $string ,所有内容都在循环之外被撕掉了。但是当我尝试将其转换为数组时,只有 var_dump 有效并给出了奇怪的结果:array(41) { [0]=> string(18) "Gadget" [1]=> string(23) "Car" [ 2]=> string(4) "Bikes" ...如何将其放入 HTML 输出中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2018-04-20
    • 2012-02-15
    • 2022-01-06
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多