Eu sou novo em PHP e estou tentando fazer perguntas de programação que envolvem classificação. Eu quero resolver este problema em que a entrada e a saída são as seguintes.
Antes da classificação: 6Ata7 ~ 58jh & * (* HLy ^) & a [yjJ> 8] G8, $ 9 <Y; B:% ^
Após a classificação: jhytaayjYBJGAHL8968758 ~ & ( ^) & [>], $ <;:% ^
Preciso de ajuda para entender como classificar de acordo com a menção do estado de ordem no título e como posso obter o mesmo resultado da entrada e saída acima. Abaixo está o código em que estou trabalhando:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test</title>
</head>
<body>
<form name="form1" id="form1" method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
<h5>Custom Sorts Self Test</h5>
<label>Insert Characters You Want to Sort
<input type="text" name="input" id="input">
</label>
<input type="submit" value="Submit">
</form>
<h1>Result</h1>
<?php
function reverseString($string){
$stringlen = strlen($string) - 1;
$split_str = str_split($string, 1);
$array = array();
for($i = 0; $i <= $stringlen; $i++){
array_push($array, $split_str[$i]);
}
rsort($array, SORT_STRING | SORT_NUMERIC | SORT_FLAG_CASE | SORT_NATURAL);
return $array;
}
if(isset($_POST['input']) && !empty($_POST['input'])){
echo '<pre>';
echo 'Before sort: ';
print_r($_POST['input']);
echo '<br>--------------------<br>';
echo 'After sort:' ;
print_r(reverseString($_POST['input']));
echo '</pre>';
}
?>
</body>
</html>
Uma opção seria classificar a matriz de caracteres de string usando uma função lambda. Podemos usar usort()
na matriz, com uma função auxiliar get_rank()
retornando um valor, de 1 a 4, dependendo se o caractere está em minúsculas, maiúsculas, numérico ou qualquer outra coisa (incluindo símbolos).
function get_rank($letter) {
if (ctype_lower($letter)) {
return 1;
}
else if (ctype_upper($letter)) {
return 2;
}
else if (is_numeric($letter)) {
return 3;
}
else {
return 4;
}
}
$input = "6Ata7~58jh&*(*HLy^)&a[yjJ>8]G8,$9<Y;B:%^";
echo $input . "\n";
$letters = str_split($input);
usort($letters, function($a, $b) {
return get_rank($a) > get_rank($b);
});
$output = implode("", $letters);
echo $output;
Isso imprime:
6Ata7~58jh&*(*HLy^)&a[yjJ>8]G8,$9<Y;B:%^
ajyjhatyYBAGJHL9886875,%:;~<$&)&]*>(*^[^
Observe que você não especificou nenhuma lógica para classificação dentro de grupos de letras minúsculas, símbolos, etc. A lógica acima pode ser modificada para incluir isso.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras