Cataneo
Cataneo

Reputation: 155

Search through array and removing duplicates

I am trying to remove duplicates from a text field. The text field auto suggests inputs and the user is only allowed to choose from them. The user however has the option of choosing same input field more than once. It's an input fields that states the firstname + lastname of each individual from a database. First, this is my code to trim some of the unwated characters and then going through the array comparing it to previous inputs.

if(!empty($_POST['textarea'])){
    $text = $_POST['textarea'];
    $text= ltrim ($text,'[');
    $text= rtrim ($text,']');

    $toReplace = ('"');
    $replaceWith = ('');
    $output = str_replace ($toReplace,$replaceWith,$text);
    $noOfCommas = substr_count($output, ",");
    echo $output.'<br>';
    $tempArray = (explode(",",$output));

    $finalArray[0] = $tempArray[0];

    $i=0;
    $j=0;

    $foundMatch=0;
    for ($i; $i<$noOfCommas; $i++) {
        $maxJ = count($finalArray);
        for ($j; $j<$maxJ; $j++) {
                if ($tempArray[$i] === $finalArray[$j]) {
                $foundMatch ===1;
            }
        }
        if ($foundMatch === 0) {
        array_push($finalArray[$j],$tempArray[$i]);
        }
    }

What is it am I doing wrong ?

Upvotes: 1

Views: 73

Answers (2)

Flajavin
Flajavin

Reputation: 61

I think that this should work:

if (!empty($_POST['textarea'])){
    $words = explode(',',str_replace('"', '', trim($_POST['textarea'], ' \t\n\r\0\x0B[]'));
    array_walk($words, 'trim');
    foreach ($words as $pos=>$word){
        $temp = $words;
        unset($temp[$pos]);
        if (in_array($word, $temp))
            unset($words[$pos]);
    }
}
echo implode("\n", $words);

First it reads all the words from textarea, removes '"' and then trim. After that it creates a list of words(explode) followed by a trim for every word. Then it checks every word from the list to see if it exists in that array (except for that pos). If it exists then it will remove it (unset).

Upvotes: 0

Rami
Rami

Reputation: 179

In this part when checking if the values are equal:

if ($tempArray[$i] === $finalArray[$j]) {
    $foundMatch ===1;
}

It should be:

if ($tempArray[$i] === $finalArray[$j]) {
    $foundMatch = 1;
}

That way you are setting the variable and not checking if it's equal to 1. You can also break the inner for loop when finding the first match.

Upvotes: 2

Related Questions