如何检查逗号分隔的字符串是否在php中具有重复值

时间:2015-08-18 18:58:39

标签: php string

我有一个包含逗号分隔字符串的变量,我想创建一个检查,如果此变量内部有重复的字符串而不将其转换为数组。如果它更容易,每个逗号分隔的字符串有3个字符。

例如

$str = 'PTR, PTR, SDP, LTP';

逻辑:如果任何字符串有重复值,则显示错误。

2 个答案:

答案 0 :(得分:0)

这应该适合你:

只需使用strtok()循环遍历字符串的每个标记,并使用,作为分隔符。然后使用preg_match_all()检查字符串中的标记是否多于一次。

<?php

    $str = "PTR, PTR, SDP, LTP";

    $tok = strtok($str, ", ");
    $subStrStart = 0;

    while ($tok !== false) {
        preg_match_all("/\b" . preg_quote($tok, "/") . "\b/", substr($str, $subStrStart), $m);
        if(count($m[0]) >= 2)
            echo $tok . " found more than 1 times, exaclty: " . count($m[0]) . "<br>";
        $subStrStart += strlen($tok);
        $tok = strtok(", ");
    }

?>

输出:

PTR found more than 1 times, exaclty: 2

答案 1 :(得分:0)

只使用explode,您将遇到一些问题。在您的示例中,如果您使用explode,那么您将获得:

'PTR', ' PTR', ' SDP', ' LTP'

你必须在那里映射修剪。

<?php
// explode on , and remove spaces
$myArray = array_map('trim', explode(',', $str));

// get a count of all the values into a new array
$stringCount = array_count_values($myArray);

// sum of all the $stringCount values should equal size of $stringCount IE: they are all 1
$hasDupes = array_sum($stringCount) != count($stringCount);
?>