如何从CSV文件数组中获取唯一的值?

4

我正在开发一个小型应用程序,根据CSV文件进行简单的报告生成,CSV文件的格式如下:

DATE+TIME,CLIENTNAME1,HAS REQUEST BLABLA1,UNIQUE ID
DATE+TIME,CLIENTNAME2,HAS REQUEST BLABLA2,UNIQUE ID
DATE+TIME,CLIENTNAME1,HAS REQUEST BLABLA1,UNIQUE ID
DATE+TIME,CLIENTNAME2,HAS REQUEST BLABLA2,UNIQUE ID

现在我正在使用以下函数进行处理:

function GetClientNames(){
    $file = "backend/AllAlarms.csv";
    $lines = file($file);
    arsort($lines);

    foreach ($lines as $line_num => $line) {
    $line_as_array = explode(",", $line);
        echo '<li><a href="#"><i class="icon-pencil"></i>' . $line_as_array[1] . '</a></li>';

    }
}

我想要获取Clientname的值,但我只想要唯一的值。

我尝试了几种不同的方法来解决这个问题,我知道我需要使用unique_array函数,但我不知道如何确切地使用该函数。

我已经尝试过以下方法:

function GetClientNames(){
    $file = "backend/AllAlarms.csv";
    $lines = file($file);
    arsort($lines);

    foreach ($lines as $line_num => $line) {
        $line_as_array = explode(",", $line);
        $line_as_array[1] = unique_array($line_as_array[1]);
        echo '<li><a href="#"><i class="icon-pencil"></i>' . $line_as_array[1] . '</a></li>';
    }
} 

但是这会给我一个非常非常脏的结果,有100多个空格而不是正确的数据。

2个回答

5

我建议你在读取csv文件时使用fgetcsv()函数。在实际应用中,csv文件可能会很复杂,使用天真的explode()方法处理可能会比较困难。

// this array will hold the results
$unique_ids = array();
// open the csv file for reading
$fd = fopen('t.csv', 'r');

// read the rows of the csv file, every row returned as an array
while ($row = fgetcsv($fd)) {
    // change the 3 to the column you want
    // using the keys of arrays to make final values unique since php
    // arrays cant contain duplicate keys
    $unique_ids[$row[3]] = true;
}

var_dump(array_keys($unique_ids));

您还可以收集值并稍后使用array_unique()。您可能还想将代码的“读入”“写出”部分拆分。


谢谢,这个答案非常好用 :) 现在我需要拆分一些数据,但那是另一个问题。 - DM-Revelation

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接