[英]Get non-repeated characters in string and count them
我需要处理像abclkjabc
这样的字符串,并且只返回3
字符,其中包括字符l
、 k
和j
。
我试过这个。
$stringArr = [];
foreach(str_split($string) as $pwd) {
if(!in_array($pwd, $stringArr)) {
$stringArr[] = $pwd;
}
}
$uniqChar = count($stringArr);
请尝试以下操作:
function getNonRepeatingCharacters($str) {
$counter = [];
$spllitted = str_split($str);
foreach($spllitted as $s) {
if(!isset($counter[$s])) $counter[$s] = 0;
$counter[$s]++;
}
$non_repeating = array_keys(array_filter($counter, function($c) {
return $c == 1;
}));
return $non_repeating;
}
$string = "abclkjabc";
$handle = getNonRepeatingCharacters($string);
尝试这个:
function getNonRepeatingChars($str) {
$uniqueLetters = '';
$multipleLetters = '';
$arrayStr = str_split($str);
foreach ($arrayStr as $index => $letter) {
if (strpos($multipleLetters, $value) !== false || strpos($str, $value, $index + 1) !== false) {
$multipleLetters .= $value;
continue;
}
$uniqueLetters .= $value;
}
return $uniqueLetters;
}
echo getNonRepeatingChars('abclkjabc'); // lkj
函数式编程和无临时变量声明:
array_filter()
也可以,但更详细)echo implode(
array_keys(
array_intersect(
array_count_values(
str_split('abclkjabc'),
),
[1]
)
)
);
或带有循环的半功能:( Demo )(或只是 count )
$unique = '';
foreach (array_count_values(str_split('abclkjabc')) as $char => $count) {
if ($count === 1) {
$unique .= $char;
}
}
echo $unique;
输出:
lkj
可以使用strlen()
获取输出字符串的长度。
您可以使用count_chars()
计算字符值,而不是拆分字符串和计数数组值。 (演示)
$string = 'abclkjabc';
$notRepeated = [];
foreach (count_chars($string, 1) as $char => $count) {
if ($count === 1) {
$notRepeated[] = chr($char);
}
}
var_export($notRepeated);
echo "\nCount = " . count($notRepeated);
最终,如果您只需要计算非重复字符的数量,这条单线将带您到达那里。 (演示)
echo count(array_filter(count_chars($string, 1), fn($count) => $count === 1));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.