Php 创建一个具有唯一字符的新字符串,并首先按频率排序,然后按asc字母顺序排序

Php 创建一个具有唯一字符的新字符串,并首先按频率排序,然后按asc字母顺序排序,php,arrays,sorting,Php,Arrays,Sorting,给定一个字符串,必须根据字符出现次数创建一个字符串,如果出现次数相等,则按字母顺序排序 $inputstring = 'ababbdcbeccc'; $stringCharArray = str_split($inputstring); for($i = 0; $i < strlen($inputstring); $i++ ) { $character = $stringCharArray[$i]; array_intersect($stringCharArray,arr

给定一个字符串,必须根据字符出现次数创建一个字符串,如果出现次数相等,则按字母顺序排序

$inputstring = 'ababbdcbeccc';

$stringCharArray = str_split($inputstring);
for($i = 0; $i < strlen($inputstring); $i++ )
{
    $character = $stringCharArray[$i];
    array_intersect($stringCharArray,array($character));
    $array =  array_values(array_intersect($stringCharArray,array($character)));
    if(!in_array($character ,$uniqueCharArr))
    {
        $uniqueCharArr[$i] = $array[0];
        $uniqueCharFreqArr[$i]['char'] = $array[0];
        $uniqueCharFreqArr[$i]['frequency'] = count($array);
    }
}

sort($uniqueCharFreqArr);
var_dump($uniqueCharFreqArr);
输出 还有其他优化方法吗

$frequencies = array_count_values(str_split($inputstring, 1));
arsort($frequencies);
$outputstring = implode('', array_keys($frequencies));
这不符合相同频率的字母应按字母顺序排列的要求。PHP没有同时查看键和值的排序函数。


<?php
    ini_set( 'xdebug.var_display_max_depth', 4 );

    /* INITIALIZATION OF DATA TYPES AND VARIABLES  */

    $m      = 0;
    $string = NULL;

    /* INPUT VALUE */
    $inputstring = 'ababbdcbeccaabbccffttbasdc';
    var_dump($inputstring);

    $frequencies = array_count_values(str_split($inputstring));
    arsort($frequencies);
    $charArrWithDecFreq = array_keys($frequencies);
    $arrFreqOccr = array_count_values($frequencies);

    foreach($arrFreqOccr as $k=>$v)
    {
        $a = array();
        for($i=0; $i<$v; $i++)
            $a[] = $charArrWithDecFreq[$m++];
        sort($a);
        $string .= implode('',$a);
    }

    /* OUTPUT DUMP TO SCREEN */
    var_dump($string);
?>

输出应为bcaed。。4.这是一件很平常的事。。要使用循环检查频率和字符?您可以使用第一行获取频率,然后将其重新排列到一个数组中,以便按照您想要的方式进行排序。
$frequencies = array_count_values(str_split($inputstring, 1));
arsort($frequencies);
$outputstring = implode('', array_keys($frequencies));
<?php
    ini_set( 'xdebug.var_display_max_depth', 4 );

    /* INITIALIZATION OF DATA TYPES AND VARIABLES  */

    $m      = 0;
    $string = NULL;

    /* INPUT VALUE */
    $inputstring = 'ababbdcbeccaabbccffttbasdc';
    var_dump($inputstring);

    $frequencies = array_count_values(str_split($inputstring));
    arsort($frequencies);
    $charArrWithDecFreq = array_keys($frequencies);
    $arrFreqOccr = array_count_values($frequencies);

    foreach($arrFreqOccr as $k=>$v)
    {
        $a = array();
        for($i=0; $i<$v; $i++)
            $a[] = $charArrWithDecFreq[$m++];
        sort($a);
        $string .= implode('',$a);
    }

    /* OUTPUT DUMP TO SCREEN */
    var_dump($string);
?>