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?

OriginalL'auteur pillarOfLight | 2011-10-05