Mit buchstaben zaehlen aa->zz

tach coomunity,

mir will nichts einfaches einfallen…
gibts dafuer vielleicht sogar hilfreiche funktionen, die ich nicht kenne…

aufgabe ist es:
user gibt einen start- und eine anzahl ein
Bsp:
start:ab
anzahl:5

dann sollte das ergebnis „af“ ergeben (start „ab“ wird mitgezaehlt)
probleme habe ich mit den „umspruengen“… wenn ich den endbereich der buchstaben erreiche.

wertebereich ist aa-zz

wie mache ich das also, wenn ich bei „zx“ bin und 10 waehle…
dann soll das script wieder bei „aa“ weiterzaehlen…

ich habe es mit chr() und 2-dim. arrays versucht…
kann mir da einer n snippet geben ?

danke…

Pixel

Ich finds grad nicht, aber im grundegenommen suchst du eine Funktion, die einfach verschiedene Zahlensysteme in einander umrechnen kann. Primär wird sowas sicherlich genutzt, um von dezimal in oktal oder binär umzurechnen, ich habe allerdings schonmal eine Funktion gefunden, der man in einem String beliebige Zeichen als „Zahlensystem“ übergeben konnte.

Ich schaue nach, sobald ich zuhause bin, vielleicht findest du ja mit den Hinweisen selbst schon sowas:wink:
LG Henrik

Hallo,

aufgabe ist es:
user gibt einen start- und eine anzahl ein
Bsp:
start:ab
anzahl:5

dann sollte das ergebnis „af“ ergeben (start „ab“ wird
mitgezaehlt)
probleme habe ich mit den „umspruengen“… wenn ich den
endbereich der buchstaben erreiche.

wertebereich ist aa-zz

in Perl:
my ($low, $high) = qw’ aa zz ';

my $v = ‚zx‘;
for (0 … 5) {
my $p = $v eq $high ? ($v=$low and $high) : $v++;
print „$p \n“
}
in PHP5:<?php $low = „aa“; $high = „zz“;

$v = „zx“;

foreach (array(1, 2, 3, 4, 5) as $i) {
if ($v == $high) { $v = $low; $p = $high; }
else { $p = $v++; }

print „$p \n“;
}
?>Grüße

CMБ

Hi,

mir will nichts einfaches einfallen…
gibts dafuer vielleicht sogar hilfreiche funktionen, die ich
nicht kenne…

evtl. so, wobei da auch außer chr, ord und modulo nix dabei ist:

function aa2int($aa) { 
 return (ord(substr($aa, 0,1))-ord('a'))\*26+
 (ord(substr($aa, 1,1))-ord('a'));
}

function int2aa($int) { 
 return chr(ord('a')+floor($int/26)).chr(ord('a')+$int%26); 
}

function add\_aa($aa, $offset);
 return int2aa((aa2int($aa)+$offset)%26\*26);
}

dann sollte das ergebnis „af“ ergeben (start „ab“ wird
mitgezaehlt)

dann -1 beim offset, wenn der Start mitzählt…

Alexander

ich habs jetzt so geloest
schaut mal,

das funzt… ich bin begeistert… spricht was dagegen?
uebergeben werden zum beispiel „ab“,5

function getSuffix($suffixStart, $anzahl){

$anzahl–;
for($i=0;$i

Hallo,

schaut mal,

das funzt… ich bin begeistert… spricht was dagegen?

ups… habe mich jetzt erstmal gefragt, WARUM das eigentlich geht… ist das Increment eines Strings in PHP speziell implementiert und nicht das gleiche wie +1, was nicht geht… wusste ich auch noch nicht, ist aber mit einem Satz im Manual dokumentiert… wie bist du darauf gekommen, das hätte ich nie versucht :wink:

Alexander

Hallo,

ups… habe mich jetzt erstmal gefragt, WARUM das eigentlich
geht… ist das Increment eines Strings in PHP speziell
implementiert und nicht das gleiche wie +1, was nicht geht…
wusste ich auch noch nicht, ist aber mit einem Satz im Manual
dokumentiert…

Die Ursprünge sind wohl vergessen :wink:

Der wahre Grund ist, dass PHP ursprünglich
in Perl geschrieben wurde und daher auch
der ‚magic ++‘ zu Perl „durchgereicht“ worden
ist. Ein Blick in den PHP-Quelltext hätte diese
Frage beantwortet (wie z.B hier
http://www.mail-archive.com/[email protected]/m…
diskutiert):

 ZEND\_API int increment\_function(zval \*op1)
 {
 .
 .
 .
 case IS\_STRING:
 /\* **<u>Perl style</u>** string increment \*/
 increment\_string(op1);
 .
 .
 .
 }

 ZEND\_API int decrement\_function(zval \*op1)
 {
 .
 .
 .
 case IS\_STRING:
 /\* **<u>Like perl</u>** we only support string increment \*/
 /\* Try to work with string as a number or leave it alone \*/
 .
 .
 .
 }

wie bist du darauf gekommen, das hätte ich
nie versucht :wink:

Vielleicht hat er den PHP-Quelltext gelesen? :wink:

Grüße

CMБ

1 Like