【问题标题】:PHP read from file into array and remove duplicates (loop)PHP从文件读入数组并删除重复项(循环)
【发布时间】:2012-09-24 12:11:17
【问题描述】:

我现在用谷歌搜索了一下,但找不到任何适合我的东西。

我有一个文本文件,其中包含: 用户名;名字;姓氏;类代码\n

我使用这个 while 循环来获取内容:

$handle = fopen("studen.txt", "r");

while(!feof($handle)) {

$linje = fgets($handle);

$larray = explode(";",$linje);

$klassekode = trim($larray[3]);

}

$larray[3] 是我在这里唯一感兴趣的东西。我想从中制作一个 html-list,所以我使用了:

echo "<option value=\"$klassekode\">$klassekode</option>";

我现在的问题是我似乎找不到删除重复条目的方法。现在有3个“IS1”,4个“IS3”等等。我怀疑有一个简单的解决方案,我根本无法弄清楚:-|

提前致谢!

【问题讨论】:

  • 顺便说一句,$larray[2] 中的类代码不是因为explode() 的结果将从零开始吗?
  • 对不起,这是用户名;名字;姓氏;班级代码。因此 $larray[3] 等于 ex IS1

标签: php arrays while-loop duplicates text-files


【解决方案1】:

一种不需要太多代码修改的快速方法是保留您已经看到的每个值的第二个数组,如果当前值存在于其中,则跳过它:

$seenValues = array();

$handle = fopen("studen.txt", "r");
while(!feof($handle)) {
    $linje = fgets($handle);
    $larray = explode(";",$linje);
    $klassekode = trim($larray[3]);

    if (in_array($klassekode, $seenValues)) continue; // skip it
    $seenValues[] = $klassekode;
    // do your other stuff
}

使用与上述相同但更有效的方法是使用$klassekode 值作为$seenValues 数组中的索引,并改用PHP 的isset()。它方式比使用 in_array() 方法快,所以如果这些条目很多并且速度很重要,请尝试以下方法:

...
if (isset($seenValues[$klassekode])) continue; // skip it
$seenValues[$klassekode] = true;
...

【讨论】:

  • 或者只是 if(!in_array($klassekode, $seenValues)) $seenValues[] = $klassekode;
  • 完美! :-D 像魅力一样工作
【解决方案2】:

您可以使用array_unique 删除重复文件并使用file 将文件读入数组

$content = array_unique(file("studen.txt"));
foreach ( $content as $var ) {
    list($userame, $klassekode, $klassekode) = explode(";", $var);
    printf("<option value=\"%s\">%s</option>", $klassekode, $klassekode);
}

【讨论】:

    【解决方案3】:

    由于 classcode 是该行中的第三个字段,因此它在 $larray[2] 中可用,而在 $larray[3] 中不可用。

    在去重复之后,您可以使用另一个数组。 PHP 中的数组可以像散列或集合一样起作用。每次你爆炸并得到一个新的类代码时,你把它放在一个数组中,最后你只需使用这个数组中的元素作为你的类代码。

    【讨论】:

      猜你喜欢
      • 2011-11-30
      • 2021-10-24
      • 2011-02-21
      • 1970-01-01
      • 2018-05-06
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多