DM-Revelation
DM-Revelation

Reputation: 143

How do I get only unique values from CSV file array

I am building a small application that does some simple reporting based on CSV files, the CSV files are in the following format:

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

Now I am processing this using the following function:

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>';

    }
}

I am trying to retrieve only the Clientname values, but I only want the unique values.

I have tried to create several different manners of approaching this, I understand I need to use the unique_array function, but I have no clue on exactly how to use this function.

I've tried this:

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>';
    }
} 

But this gives me a very very dirty result with 100's of spaces instead of the correct data.

Upvotes: 4

Views: 4902

Answers (2)

complex857
complex857

Reputation: 20753

I would recommend you to use the fgetcsv() function when reading in csv files. In the wild csv files can be quite complicated handle by naive explode() approach:

// 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));

You can also collect values and use array_unique() on them later. You probably want to split the "reading in" and the "writing out" part of your code too.

Upvotes: 5

Kyle Emmanuel
Kyle Emmanuel

Reputation: 2221

Try using array_unique()

Docs: http://php.net/manual/en/function.array-unique.php

Upvotes: 0

Related Questions