PHP从文件读入数组并删除重复项(循环)

PHP从文件读入数组并删除重复项(循环),php,arrays,while-loop,duplicates,text-files,Php,Arrays,While Loop,Duplicates,Text Files,我现在在谷歌上搜索了一下,但找不到适合我的东西 我有一个文本文件,其中包含: 用户名;名字;姓氏;类代码\n 我使用这个while循环来获取内容: $handle = fopen("studen.txt", "r"); while(!feof($handle)) { $linje = fgets($handle); $larray = explode(";",$linje); $klassekode = trim($larray[3]); } $larray[3]是我唯一感兴趣的东西

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

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

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

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

while(!feof($handle)) {

$linje = fgets($handle);

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

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

}
$larray[3]是我唯一感兴趣的东西。我想从中创建一个html列表,因此我使用:

echo "<option value=\"$klassekode\">$klassekode</option>";
echo“$klassekode”;
我现在的问题是,我似乎找不到删除重复条目的方法。现在有3个“IS1”,4个“IS3”等等。我怀疑有一个简单的解决办法,我就是想不出来:-|


提前谢谢

您可以使用
array\u unique
删除重复文件,并使用
文件
将文件读入数组

$content = array_unique(file("studen.txt"));
foreach ( $content as $var ) {
    list($userame, $klassekode, $klassekode) = explode(";", $var);
    printf("<option value=\"%s\">%s</option>", $klassekode, $klassekode);
}
$content=array_unique(文件(“studen.txt”);
foreach($var形式的内容){
列表($userame,$klassekode,$klassekode)=分解(“;”,$var);
printf(“%s”,$klassekode,$klassekode);
}

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


除重复数据消除外,还可以使用另一个阵列。PHP中的数组可以像散列或集合一样工作。每次分解并获得新的类代码时,您都会将其放入一个数组中,最后您只需使用此数组中的元素作为类代码。

一个快速的方法是,在不进行太多代码修改的情况下,保留已看到的每个值的第二个数组,如果其中存在当前值,则跳过它:

$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;
...

或者如果(!in_数组($klassekode,$seenValues))$seenValues[]=$klassekode;太好了-D的工作原理就像一个charmAs,你的类代码不是在
$larray[2]
中吗,因为
explode()
的结果将是零基的吗?对不起,它是用户名;名字;姓氏;类代码。因此,$larray[3]等于exis1