php: conversion de nombre d'alphabet et vice versa
donc, j'ai cette fonction:
function toAlpha($data){
$alphabet = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$alpha_flip = array_flip($alphabet);
if($data <= 25){
return $alphabet[$data];
}
elseif($data > 25){
$dividend = ($data + 1);
$alpha = '';
$modulo;
while ($dividend > 0){
$modulo = ($dividend - 1) % 26;
$alpha = $alphabet[$modulo] . $alpha;
$dividend = floor((($dividend - $modulo) / 26));
}
return $alpha;
}
}
qui étant donné un nombre, il se transforme en personnage et il fonctionne très bien
mais alors je veux aussi une fonction d'inversion de ce que, compte tenu de toute sortie de cette fonction, le retour de la exacte d'entrée qui a été mis en production de cette sortie et j'ai essayé ceci:
function toNum($data){
$alphabet = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$alpha_flip = array_flip($alphabet);
if(strlen($data) == 1){
return (isset($alpha_flip[$data]) ? $alpha_flip[$data] : FALSE);
}
else if(strlen($data) > 1){
$num = 1;
for($i = 0; $i < strlen($data); $i++){
if(($i + 1) < strlen($data)){
$num *= (26 * ($alpha_flip[$data[$i]] + 1));
}
else{
$num += ($alpha_flip[$data[$i]] + 1);
}
}
return ($num + 25);
}
}
mais il ne fonctionne pas correctement...toAlpha(728) est la production de "aba", mais toNum('aba') est la production de 1378 plutôt que de 728...
qu'ai-je fait de mal? comment puis-je réparer l'inverse de la fonction de sorte qu'il fonctionne correctement?
merci d'avance!
Si vous essayez de convertir un nombre de la base 10 à la base de 26, est ce que c'est?
Quelle est l'origine toAlpha fonction censé faire? Qu'est-ce que le comportement désiré si le nombre est supérieur à 25?
il devient de lettres doubles, triples lettres, etc par exemple: 26 = aa, 27 = ab, etc
Si 'a' est votre 0, puis ne devraient pas aa aussi être égal à 0? Au moins, si vous êtes juste essayer de mettre en œuvre straight-up de base-26 en utilisant des lettres plutôt que des chiffres.
Le résultat souhaité de deux fonctions est vraiment pas clair. Pouvez-vous expliquer ce qu'est la fonction de sortie exactement et par quelles règles?
Quelle est l'origine toAlpha fonction censé faire? Qu'est-ce que le comportement désiré si le nombre est supérieur à 25?
il devient de lettres doubles, triples lettres, etc par exemple: 26 = aa, 27 = ab, etc
Si 'a' est votre 0, puis ne devraient pas aa aussi être égal à 0? Au moins, si vous êtes juste essayer de mettre en œuvre straight-up de base-26 en utilisant des lettres plutôt que des chiffres.
Le résultat souhaité de deux fonctions est vraiment pas clair. Pouvez-vous expliquer ce qu'est la fonction de sortie exactement et par quelles règles?
OriginalL'auteur pillarOfLight | 2011-10-05
Vous devez vous connecter pour publier un commentaire.
Je ne comprends pas du tout la logique que vous essayez d'utiliser dans cette fonction. Ce que vous essayez de faire semble très étrange (pourquoi une " carte à zéro et pourtant, 'aa' cartes à 26?), mais cela semble fonctionner. (Vous voulez utiliser un peu plus de cas de test, je n'ai vérifié qu'elle donne de bons résultats pour le cas 'aba'.)
En base 10, le successeur de 9 n'est pas 00. Alors, pourquoi est-à aa le successeur de z?
Excel ne ce. Peut-être que @pillarOfLight a été à essayer de comprendre quelque chose avec des feuilles de calcul.
$alphabet = range('a', 'z');
m'avait troublé, mais après le caractère unique de la deuxième
a
dansaa
se déplace ce à partir de la base de 26 àbase 27
car il a une valeur de position (donc a-z de PLUS l'absence d'un un = 27 caractères). C'est comme si001
101!OriginalL'auteur Hammerite
Voie la plus courte, en PHP >= 4.1.0
Excellent et un gain de temps de réponse.
Cela ne fonctionnera pas pour tout entier qui dépasse la longueur de l'alphabet de tableau; par exemple, "42".
OriginalL'auteur Cyril
Vos problèmes vient de votre carte. Regardez ceci:
Vous pouvez exécuter ce aussi haut que vous le souhaitez et votre serveur de mémoire. Le PHP est buggé, et (au moins sur mon serveur) si vous utilisez le <= opérateur:
alors il sera de la carte tout le chemin à [676]=> string(2) "yz"! Vous avez juste à jouer avec elle.
Je n'ai pas envie de mapper une lettre à [0] donc, je viens de mettre un titre. Évidemment, vous pouvez les laisser si vous voulez 0=>a, 1=>b, etc.
Une fois que le tableau est correct, la fonction est trivial.
range('a', 'z')
OriginalL'auteur Mason Barge
À partir du numéro de l'alphabet (avec A=0, B=1, etc...):
Vous pouvez faire de même à partir de l'alphabet de nombre avec la fonction
ord()
.Changement de 65 à 97, vous pouvez obtenir les minuscules valeurs.
OriginalL'auteur sara_thepot
J'ai pris le "corrigé" d'origine, enlevé le code de débogage, et d'autres inutiles code, modifié de sorte qu'il fonctionne avec n'importe quel nombre de caractères. Par exemple, que le grec a 24 caractères.
Et voici quelques exemples de gammes:
$number--;
pas$number;
. Si cela fonctionne, il semble être juste ce dont j'avais besoin. Aussi qu'est-ce que % TARD malheureusement, cela ne fonctionne pas. ` $alpha = $alphabet[$modulo].$alpha;` a un pas défini$alpha
. L'original avait$alpha = " "
mais même avec cette insérée, elle ne fonctionne toujours pas. Je ne savais pas que l'OP avait fourni un travail de script pour cette. J'ai perdu 20 minutes à essayer d'obtenir ce travail si, malheureusement, vous êtes l'obtention de mon premier bas de vote. Si vous corrigez le problème, je vais enlever le bas de vote.J'ai juste couru le code. L'exemple fonctionne très bien, mais votre droit, et il y a des problèmes avec le point de départ d'un nombre. Il y a aussi une notice PHP est levée, mais cela n'affecte pas le fonctionnement de celui-ci.
J'ai mis à jour l'exemple de ce que j'ai fini de l'utiliser.
Merci j'ai modifié une autre version et ont, comme d'habitude, piraté une solution ensemble (ça marche, je ne sais pas pourquoi, mais ça marche!) U pourrait peut-être expliquer la
--
et la%
pls.href="http://php.net/manual/en/language.operators.increment.php" >php.net/manual/en/language.operators.increment.php php.net/manual/en/language.operators.arithmetic.php
OriginalL'auteur Dr. Sassafras
Voici un correctif à l'origine de la fonction toAlpha. Il n'est pas de travail pour toAlpha(27)
OriginalL'auteur Santosh Pradhan
function number_to_alpha($num, $code)
{
$alphabets = array('', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
}
function alpha_to_number($code)
{
$alphabets = array('', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
}
OriginalL'auteur Praveen
OriginalL'auteur paul4156