Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jonny_quest

[Resolvido] Separar letras de uma string e atribuir número a elas

Recommended Posts

Boa tarde grupo! :)

 

Eu preciso pegar o valor de uma string por exemplo Jonny e a cada letra atribuir um número, por exemplo J=12, o=5, n=3, n=3, y=18, sendo que "J" e "j" tem que ter o mesmo valor ou seja 12, caso a pessoa digite né, tudo maiúsculo ou tudo minúsculo ou faça alternada maiúscula ou minúscula.

 

Eu pelo pouco que sei de PHP uma variável pode se comportar como uma matriz, ou seja: $MinhaString = Jonny se eu fizer isso: $letra = $MinhaString[4], me retorna a letra "y".

 

Eu quero dar um for nessa string e testar letra por letra com um dicionário de letras e números de a..z, A..Z e 0..9 ;)

 

Como eu posso fazer isso e no final me retornar somente os números de acordo com a string lançada Jonny será igual a: 1253318 ??? :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Periscuelo ! :)

 

Obrigado pela dica, mas ainda não consigo associar a letra ao número.(tentarei usando um array e farei testes) ;)

 

Vou continuar os testes aqui qualquer dúvida volto a esse post. :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você primeiro precisa informar ao script que cada dígito será identificado por uma letra, ou vice-versa.

 

Vamos a um exemplo MANUAL:

 

################## Registro de dígitos para cada caractere a ser substituído na frase ######################
$codigosNovos[11] = 'a';	$codigosNovos[12] = 'b';	$codigosNovos[13] = 'c';	$codigosNovos[14] = 'd';
$codigosNovos[15] = 'e';	$codigosNovos[16] = 'f';	$codigosNovos[17] = 'g';	$codigosNovos[18] = 'h';
$codigosNovos[19] = 'i';	$codigosNovos[21] = 'j';	$codigosNovos[22] = 'k';	$codigosNovos[23] = 'l';
$codigosNovos[24] = 'm';	$codigosNovos[25] = 'n';	$codigosNovos[26] = 'o';	$codigosNovos[27] = 'p';
$codigosNovos[28] = 'q';	$codigosNovos[29] = 'r';	$codigosNovos[31] = 's';	$codigosNovos[32] = 't';
$codigosNovos[33] = 'u';	$codigosNovos[34] = 'v';	$codigosNovos[35] = 'x';	$codigosNovos[36] = 'w';
$codigosNovos[37] = 'y';	$codigosNovos[38] = 'z';	$codigosNovos[39] = 'A';	$codigosNovos[41] = 'B';
$codigosNovos[42] = 'C';	$codigosNovos[43] = 'D';	$codigosNovos[44] = 'E';	$codigosNovos[45] = 'F';
$codigosNovos[46] = 'G';	$codigosNovos[47] = 'H';	$codigosNovos[48] = 'I';	$codigosNovos[49] = 'J';
$codigosNovos[51] = 'K';	$codigosNovos[52] = 'L';	$codigosNovos[53] = 'M';	$codigosNovos[54] = 'N';
$codigosNovos[55] = 'O';	$codigosNovos[56] = 'P';	$codigosNovos[57] = 'Q';	$codigosNovos[58] = 'R';
$codigosNovos[59] = 'S';	$codigosNovos[61] = 'T';	$codigosNovos[62] = 'U';	$codigosNovos[63] = 'V';
$codigosNovos[64] = 'X';	$codigosNovos[65] = 'W';	$codigosNovos[66] = 'Y';	$codigosNovos[67] = 'Z';
$codigosNovos[68] = '0';	$codigosNovos[69] = '1';	$codigosNovos[71] = '2';	$codigosNovos[72] = '3';
$codigosNovos[73] = '4';	$codigosNovos[74] = '5';	$codigosNovos[75] = '6';	$codigosNovos[76] = '7';
$codigosNovos[77] = '8';	$codigosNovos[78] = '9';	$codigosNovos[79] = '!';	$codigosNovos[81] = '@';
$codigosNovos[82] = '\'';	$codigosNovos[83] = '"';	$codigosNovos[84] = '#';	$codigosNovos[85] = '?';
$codigosNovos[86] = '%';	$codigosNovos[87] = ' ';	$codigosNovos[88] = '*';	$codigosNovos[89] = '(';
$codigosNovos[91] = ')';	$codigosNovos[92] = '-';	$codigosNovos[93] = '_';	$codigosNovos[94] = '=';
$codigosNovos[95] = '+';	$codigosNovos[96] = '.';	$codigosNovos[97] = ',';	$codigosNovos[98] = '/';	$codigosNovos[99] = ':';
############################################################################################################

 

Fui obrigado a fazer isso para um script de criptografia com matrizes que projetei. Veja que cada caractere pode ser identificado com um índice diferente, e eu posso encontrar determinado caractere dentro de uma string com as funções do próprio PHP.

Uma maneira menos gambiarra de se fazer seria assim:

 

<pre>
<?php
for ($i=33; $i <= 255; ++$i) {
 $codigosNovos[$i] = chr($i);
}
print_r($codigosNovos);
?>

 

Depois basta substituir. Um foreach aqui, um array_search ali, e voilá.

Espero ter contribuido.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela dica, mas ainda não consigo associar a letra ao número.

 

Qual foi o erro que apareceu ou problema encontrado em fazer o que deseja?

 

Poste os testes que esta fazendo.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já pensou em retornar o código ASCII do caractere?

http://www.php.net/manual/en/function.ord.php

 

a não ser que você queira especificar números determinados por você a cada letra.

Se não a tabela ASCII está aí para isso :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde, Beraldo, Periscuelo e Matheus Tavares! :)

 

Pariscuelo, os testes que fiz não retornam erros por estarem corretos no tocante de um "for" esta no laço certo um "While" estar no looping certo tb, porém não encontro meios de associar o resultado a uma busca dentro de uma matriz. Eu não conhecia o array_search, que o Matheus comentou, vou ler sua documentação e ver se me serve.

 

eu tentei um treco meio louco aqui e não sei se funciona pois lí que este sinal ||, representa ou OU por exemplo (a||A) seria o mesmo que dizer (a ou A. portanto fiz isso aqui.

 

$letras = array("a||A" => "1","b||B" => "2" ... e por ai foi até Z; Não sei se na hora de ler o PHP entende como sendo (a ou A) uma ocorrência ou outra, ou se ele se confunde achando que tudo é uma string só como se estivesse escrito "aA" =>"1". Não tenho experiência para dizer se isso funciona, porém não retorna erro, mas também não mostra o resultado.

 

O que o Matheus falou sobre um sistema de criptografia com matrizes, é bem pertinente ao que estou tentando fazer, porém seria um gerador de códigos numéricos baseado em caracteres previamnete numerados em ordem a ser definida, como eu expliquei (a=12 ou A=12, c=33 ou C=33, ...z=203 ou Z=203).

 

Quando digito a palavra Zac seria o mesmo que 2031233. ;) é interessante, mas ainda não consegui fazer isso. ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

assim:

<?php
echo '<strong>Zac</strong> = ',str2numbers( 'Zac' ), '<br />';
echo '<strong>zac</strong> = ',str2numbers( 'zac' ), '<br />';
echo '<strong>BruNo</strong> = ',str2numbers( 'BruNo' ), '<br />';
echo '<strong>bruno</strong> = ',str2numbers( 'bruno' ), '<br />';


function str2numbers( $str )
{
$arr = Array(
	'a' => 12,
	'b' => 13,
	'c' => 33,
	'n' => 7,
	'o' => 5,
	'r' => 14,
	'u' => 2,
	'z' => 203
);

$str = strtolower( $str );
for( $i=0, $len=strlen($str), $numbers = ''; $i<$len; $i++ )
{
	$numbers .= $arr[ $str[ $i ] ];
}
return $numbers;
}

??

 

saída:

Zac = 2031233

zac = 2031233

BruNo = 1314275

bruno = 1314275

 

funções nativas usadas:

strlen(), strtolower() e for()

 

só fiquei curioso pra ver como seria a implementação com str_split(), array_search(), foreach() :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde colegas do grupo! :) acabo de resolver o problema em partes veja:

 

 

$valor ="fabio";

 

$letras = array(0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd', 4 => 'e', 5 => 'f', 6 => 'g', 7 => 'h', 8 => 'i', 9 => 'j', 10 => 'k', 11 => 'l', 12 => 'm', 13 => 'n', 14 => 'o', 15 => 'p', 16 => 'q', 17 => 'r', 18 => 's', 19 => 't', 20 => 'u', 21 => 'v', 22 => 'x', 23 => 'y', 24 => 'w', 25 => 'z');

 

for($L=0; $L <=strlen($valor); $L++){

$key = array_search($valor[$L], $letras);

echo $key;

}

 

Baseado nisso só resta numerar as letras de acordo com a numeração desejada e implementar como uym gerador de códigos baseado nem nomes ou palavras chaves.

 

Mas acabo de ver que nosso colega William Bruno, também postou um código vou ver como ele funciona! :D

William repare no array_search que você queria ver funcionar ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, funciona perfeito tb o código do William, Valeu William gostei da sua ideia de tratar todas as letras para minúsculas, mesmo que eu digite algo em maiúsculo, como ela terá que ter o mesmo valor da minuscula, nada mais LÓGICO do que tratar ela para minúscula com o strtolower. :clap:

 

A ideia do Matheus Tavares também ajudou muito sobre o uso do array_search, com ele matei o problema de buscar algo dentro do array. :joia:

 

Problema resolvido!!!

 

Meus agradecimentos aos colegas: Beraldo, Periscuelo, Matheus Tavares e William Bruno! :clap:

 

Muito obrigado pela ajuda e orientação de voces! :joia:

 

Em tempo! :) Obrigado ao colega lucaswxp :joia: , que ajudou!! Também gostei do str_ireplace não faz a diferenciação de maiúsculas e minúsculas nos resultados obtidos nas buscas.!!! Muito bom tb !!! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só uma dica...

 

for($L=0; $L <=strlen($valor); $L++){
 $key = array_search($valor[$L], $letras);
 echo $key;
}

 

Nesse código que você fez o strlen está sendo executado em cada volta do for. O ideal seria fazer assim:

 

$total = strlen($valor);
for($L=0; $L <= $total; ++$L){
 echo array_search($valor[$L], $letras);
}

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Matheus Tavares! :)

 

Voce está certíssimo, porém o problema ai talvez esteja em usar processamento desnecessário para executar o strlen nesse laço, mas como no caso o que ele está pegando é o tamanho da string que foi lançada, ele estaria dentro do laço retornando sempre o mesmo valor de tamanho da string, não muda no resultado.

 

Mas gostei da observação e modifiquei meu código, pois em grandes sistemas cada linha de processamento desnecessário poupada significa maior desempenho do sistema. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.