我有一个包含逗号分隔字符串的变量,我想创建一个检查,如果此变量内部有重复的字符串而不将其转换为数组。如果它更容易,每个逗号分隔的字符串有3个字符。
例如
$str = 'PTR, PTR, SDP, LTP';
逻辑:如果任何字符串有重复值,则显示错误。
答案 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);
?>