【问题标题】:PHP - Remove duplicates with foreach?PHP - 使用 foreach 删除重复项?
【发布时间】:2018-03-13 12:40:45
【问题描述】:

我有一个页码数组:

foreach($elements as $el) {
$pageno = $el->getAttribute("pageno");

echo  $pageno ;
}

遗憾的是它包含重复项。我尝试了以下代码,但它不会返回任何东西:

foreach(array_unique($elements) as $el) {
$pageno = $el->getAttribute("pageno");

echo  $pageno ;
}

如何去除重复的页码?在此先感谢:)

【问题讨论】:

  • 它按我的预期工作,3v4l.org/iPoZk。也许$elements 不是一个数组? getAttribute 听起来可能像 domdocument 对象?
  • 为什么不使用array_unique()
  • @GrumpyCrouton 他实际上在第二个 foreach 中使用了 array_unique
  • @MacBooc 这对我来说更没有意义,除非它是一个多维数组。在这种情况下,只需使用它两次。
  • @GrumpyCrouton 我认为它甚至是一个具有不同值的对象数组,而他在他的循环中使用getAttribute,所以 array_unique 不能在这里工作 imo

标签: php foreach duplicates


【解决方案1】:

由于我没有您的数据结构,因此我提供了一个通用解决方案。如果我们知道$elements 的结构,这可以优化,但下面应该适合你。

$pageNos = array();
foreach($elements as $el) {
   $pageno = $el->getAttribute("pageno");
   if(!in_array($pageno, $pageNos))
   {
       echo $pageno ;
       array_push($pageNos,$pageno);
   }
}

基本上我们只是使用一个额外的数组来存储打印的值。每次我们看到一个新值时,我们都会打印它并将其添加到数组中。

【讨论】:

  • 谢谢!这工作得很好。虽然有语法错误。通过添加 ; 修复在“array_push($pageNos,$pageno)”之后。 :) 还有办法对这个数组进行排序吗?它回响: 7 6 8 1 2 3 4 5 现在。我很想拥有它:1 2 3 4 5 6 7 8。
  • @Jack 您可以在 foreach 之后执行 PHP 的 sort(),然后再次循环遍历元素以显示页码。
【解决方案2】:

除了已经提供的答案,您还可以使用array_unique()

一个非常简单的例子:

$pageno = array_unique($pageno);

【讨论】:

    【解决方案3】:

    您可以创建一个临时的页码列表。然后将从 $elements 列表中删除重复的实例:

    // Create a temporary list of page numbers
    $temp_pageno = array();
    foreach($elements as $key => $el) {
        $pageno = $el->getAttribute("pageno");
        if (in_array($pageno, $temp_pageno)) {
            // Remove duplicate instance from the list
            unset($elements[$key]);
        }
        else {
            // Ad  to temporary list
            $temp_pageno[] = $pageno;
        }
    
        echo  $pageno ;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-07
      • 1970-01-01
      • 2015-08-19
      • 2012-02-15
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      相关资源
      最近更新 更多