Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Liczba do ciągu literek
Forum PHP.pl > Forum > PHP
Black-Berry
Potrzeban mi funkcja która zamienia kolejne liczby na ciągi literek w ten sposób:

1 -> A
2 -> B
3- > C
(...)
25 -> Y
26 -> Z
27 -> AA
28 -> AB
(...)
-> ZY
-> ZZ
-> AAA
-> AAB
(...)

Słyszał ktoś może o jakimś gotowcu? Byłbym wdzięczny.
zegarek84
str_replace - przyjmuje jako argumenty tablice, możesz to w osobnych tablicach zamieścić co za co podmieniać ale prościej w jednej i skożystać jeszcze z array_keys() i array_values()

w manualu pod str_replace co podałem link są przykłady
Black-Berry
Nie zrozumieliśmy się... Ja nie mam stasłej ilości liczb. To ma być funkcja generująca unikatowy ciąg znaków z unikatowej liczby. To jest powiązane z systemami liczbowymi z tym że ciąg znaków gdzie po 'Z' następuje 'AA' nie jest systemem liczbowym w normalnym roumieniu. Gdyby to był system 26-tkowy to po 'Z' występowałoby 'BA'
likemandrake
Proszę, wygląda na to, że napisałem ją specjalnie dla Ciebie tongue.gif

  1. <?php
  2. function toChar($number) {
  3.    static $alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  4.    
  5.    if ($index = (int) ($number / 26)) {
  6.        return toChar($index - 1) . toChar($number - $index * 26);
  7.    } else {
  8.        return $alphabet{$number};
  9.    }
  10. }
  11.  
  12. for ($i = 0, $n = pow(26, 3) + pow(26, 2) + pow(26, 1); $i < $n; $i++) {
  13.    echo toChar($i) . "<br>";
  14. }
  15. ?>
legorek
A może base_convert" title="Zobacz w manualu PHP" target="_manual o podstawie 10 i systemie docelowym 36?
likemandrake
To jest dobre tongue.gif

  1. <?php
  2. echo toChar(PHP_INT_MAX);
  3. ?>
Black-Berry
@likemandrake Nie wiem czego się naćpałeś ale to co napisałeś pięknie działa smile.gif W między czasie znalazłem coś takiego:

  1. <?php
  2. function NumberToAlphabet($number)
  3.    {
  4.        $result = '';
  5.        while($number >= 1) {
  6.            $number = $number - 1;
  7.            $result = chr(($number % 26) + 65) . $result;
  8.            $number = $number / 26;
  9.        }
  10.        return $result;
  11.    }
  12. ?>


Muszę to sprawdzić ale chyba twój sposób liczy szybciej:) Zajeło Ci to naprawdę chwilę. Nam z kolegami nie udało się po 2 godzinach biggrin.gif Starość nie radość ;P

@legorek base_convert nic nie da bo to nie jest system liczbowy. Pisałem o tym we wcześniejszym poście.
wrzasq
@Black-Berry: ale ale, chwila, jakto nie jest system liczbowy?

Cytat
To jest powiązane z systemami liczbowymi z tym że ciąg znaków gdzie po 'Z' następuje 'AA' nie jest systemem liczbowym w normalnym roumieniu. Gdyby to był system 26-tkowy to po 'Z' występowałoby 'BA'


Cytat
1 -> A


biorac pod uwage, ze nie zdefiniowales zera, natomiast A odpowiada jedynce, to jaknajbardziej z 0Z bedzia AA, nie BA. badz co badz kody podane zadzialaja, ale chyba sam zes siebie przekonał do tego jakie to będzie straszne winksmiley.jpg.
likemandrake
Zdradzić ci mój sekret?

100% abscynencji, 100% braku papierosów, dodatkowo codzienne picie soczku tarczyn, częste picie zielonej herbatki, piękna dziewczyna u boku i może chyba to, że sesje mam :/

Trzeba iść w końcu spać biggrin.gif A co do czasu poświęconego na funkcję, nie wiem czy nie straciłem na to 15-20 minut smile.gif
Black-Berry
Cytat(wrzasq @ 4.02.2009, 00:36:58 ) *
@Black-Berry: ale ale, chwila, jakto nie jest system liczbowy?
biorac pod uwage, ze nie zdefiniowales zera, natomiast A odpowiada jedynce, to jaknajbardziej z 0Z bedzia AA, nie BA. badz co badz kody podane zadzialaja, ale chyba sam zes siebie przekonał do tego jakie to będzie straszne winksmiley.jpg.


@wrzasq Jak nietrudno wyliczyć to w naszym systemie dziesiętnym za pomocą 10 znaków zapisujemy dokładnie 100 liczb których długośc nie przekracza 2 znaków. Natomiast gdyby system dziesiętny działał na podobnej zasadzie co ten z literek alfabetu to kolejne liczny tworzylibyśmy tak:
0
1
2
3
4
5
6
7
8
9
00
01
02
03
04
05
(..)
96
97
98
99
000
(..)
itd...
Za pomocą takiego systemu można zapisać 110 różnych liczb których długość nie przekracza 2 znaków. To bardzo utrudnia konwersję przez co trzeba być kosmitą żeby to napisać. Co dowodzi że likemandrake jest z kosmosu. Uważajcie na niego:) Pozdrawiam.
likemandrake
Hmmm, kosmitą powiadasz... Kurcze, a mnie całe życie wmawiali, że urodziłem się w szpitalu :]

A co do tej mojej "kosmicznej" funkcji, od początku założyłem, że dobra będzie rekurencja, a dalej jakoś już się tam działo.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.