搜索数组并删除重复项

时间:2013-11-26 09:19:46

标签: php

我正在尝试从文本字段中删除重复项。文本字段自动建议输入,并且仅允许用户从中进行选择。 但是,用户可以选择多次选择相同的输入字段。它是一个输入字段,用于说明数据库中每个人的名字和姓氏。 首先,这是我的代码,用于修剪一些未打开的字符,然后通过数组将其与先前的输入进行比较。

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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

在检查值是否相等时,在此部分中:

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

应该是:

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

这样你就可以设置变量,而不是检查它是否等于1.你也可以在找到第一个匹配时打破内部for循环。

答案 1 :(得分:0)

我认为这应该有效:

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

首先它读取textarea中的所有单词,删除'“'然后修剪。之后它会创建一个单词列表(explode),然后是每个单词的修剪。 然后它检查列表中的每个单词以查看它是否存在于该数组中(该pos除外)。如果它存在,那么它将删除它(未设置)。