Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 返回按字符串顺序出现的字母_Php - Fatal编程技术网

Php 返回按字符串顺序出现的字母

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

我编写此代码是为了返回字符串中字母的出现次数。 此函数返回“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');
        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 synthax
If(mb_substr($input,$i,1,'UTF-8')==mb_substr($input,$i-1,1,'UTF-8'))
将告诉您当前字符是否与前面的字符相同。非常感谢,我只是明白了,它是有效的