Php 返回按字符串顺序出现的字母
我编写此代码是为了返回字符串中字母的出现次数。 此函数返回“6a3b5y”,但我希望它尊重顺序并显示“4a3b2a5y” 如何将其更改为显示“4a3b2a5y”Php 返回按字符串顺序出现的字母,php,Php,我编写此代码是为了返回字符串中字母的出现次数。 此函数返回“6a3b5y”,但我希望它尊重顺序并显示“4a3b2a5y” 如何将其更改为显示“4a3b2a5y” function encode($input) { $l = mb_strlen($input, 'UTF-8'); $unique = array(); for($i = 0; $i < $l; $i++) { $char = mb_substr($input, $i, 1, 'UTF-8
function encode($input) {
$l = mb_strlen($input, 'UTF-8');
$unique = array();
for($i = 0; $i < $l; $i++) {
$char = mb_substr($input, $i, 1, 'UTF-8');
if(!array_key_exists($char, $unique))
$unique[$char] = 0;
$unique[$char]++;
}
$a=[];
foreach($unique as $k=>$val){
$a[]= $val.$k ;
}
return implode("",$a) ;
}
echo encode('aaaabbbaayyyyy') ;
函数编码($input){
$l=mb_strlen($input,'UTF-8');
$unique=array();
对于($i=0;$i<$l;$i++){
$char=mb_substr($input,$i,1,'UTF-8');
如果(!array_key_存在($char,$unique))
$unique[$char]=0;
$unique[$char]++;
}
$a=[];
foreach($k=>$val时唯一){
$a[]=$val.$k;
}
返回内爆(“,$a”);
}
回波编码('aaaabbbaayyyy');
使用变量保存上一个字符。将当前字符与其进行比较。如果它们相同,则增加一个计数器。如果不是,则输出上一个字符和计数器,然后重置变量
最后,输出最后一个字符和计数器
function encode($input) {
$output = '';
$l = mb_strlen($input, 'UTF-8');
$prevchar = mb_substr($input, 0, 1, 'UTF-8');
$count = 1;
for($i = 1; $i < $l; $i++) {
$char = mb_substr($input, $i, 1, 'UTF-8');
if ($char == $prevchar) {
$count++;
} else {
$output .= "$count$prevchar";
$count = 1;
$prevchar = $char;
}
}
$output .= "$count$prevchar";
return $output;
}
函数编码($input){
$output='';
$l=mb_strlen($input,'UTF-8');
$prevchar=mb_substr($input,0,1,'UTF-8');
$count=1;
对于($i=1;$i<$l;$i++){
$char=mb_substr($input,$i,1,'UTF-8');
如果($char==$prevchar){
$count++;
}否则{
$output.=“$count$prevchar”;
$count=1;
$prevchar=$char;
}
}
$output.=“$count$prevchar”;
返回$output;
}
Google“run-length encoding”,因为这正是您试图实现的。您不能为此使用关联数组,因为它不能处理字符串不同部分中的重复项。您应该检查当前字符是否与前一个字符相同。如果是,则递增计数器。如果不是,则输出计数器和字符,然后重置这两个变量。我考虑过这一点,但我不知道如何使用php synthaxIf(mb_substr($input,$i,1,'UTF-8')==mb_substr($input,$i-1,1,'UTF-8'))
将告诉您当前字符是否与前面的字符相同。非常感谢,我只是明白了,它是有效的