2

私は今少しググったが、私のために働くものを見つけることができない。

次のテキストファイルがあります:username; firstname; lastname; classcode \ 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>";

今の私の問題は、重複するエントリを削除する方法が見つからないように見えることです。現在、3つの「IS1」、4つの「IS3」などがあります。これには簡単な解決策があると思いますが、私には理解できません:-|

前もって感謝します!

4

3 に答える 3

1

コードをあまり変更せずに簡単に行う方法は、すでに見たすべての値の2番目の配列を保持し、現在の値がその中に存在する場合はスキップすることです。

$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は、配列のインデックスとして値を使用し、代わりに$seenValuesPHPを使用することです。isset()この方法を使用するよりもはるかに高速でin_array()あるため、これらのエントリが多数あり、速度が重要な場合は、代わりにこれを試してください。

...
if (isset($seenValues[$klassekode])) continue; // skip it
$seenValues[$klassekode] = true;
...
于 2012-10-03T14:32:59.613 に答える
0

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);
}
于 2012-10-03T14:31:57.653 に答える
0

classcode は行の 3 番目のフィールドであるため、 では利用できますが$larray[2]、 では利用できません$larray[3]

重複除外の次に、別のアレイを利用できます。PHP の配列は、ハッシュまたはセットのように機能します。分解して新しいクラスコードを取得するたびに、それを配列に入れ、最後にこの配列の要素をクラスコードとして使用します。

于 2012-10-03T14:32:38.197 に答える