2012-10-03 98 views
2

我已經google了一下,但找不到任何適合我的東西。PHP從文件讀入數組並刪除重複項(循環)

我有一個包含一個文本文件: 用戶名,姓名,姓氏; 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」等。我懷疑這是一個簡單的解決方案,我根本無法弄清楚: - |

在此先感謝!

+0

array_unique($ klassekode); – Cups

+0

另一方面,不是''larray [2]'中的類代碼,因爲'explode()'的結果是基於零的? – Sepster

+0

對不起,它是用戶名;名字;姓氏;類代碼。因此,如果(!in_array($ klassekode,$ seenValues)) $ seenValues [] = $ klassekode,$ larray [3]等於ex IS1 – dbso

回答

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 
} 

使用相同方法,但效率更高,將使用值作爲$seenValues陣列中的索引,並使用PHP的isset()代替。這是比使用in_array()方法快方式,所以如果有很多這些條目和速度是非常重要的,試試這個來代替:

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

或只是 ; – becknr

+0

完美! :-D像魅力一樣工作 – dbso

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); 
} 
0

由於classcode是它在$larray[2]可用的,而不是在$larray[3]行第3場。

除去重複您可以使用另一個數組。 PHP中的數組可以像哈希或集合一樣工作。每當你爆炸並獲得一個新的類代碼,你把它放在一個數組中,最後你只需使用這個數組中的元素作爲你的類代碼。