Abeceda – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Abeceda – PHP – Fórum – Programujte.comAbeceda – PHP – Fórum – Programujte.com

 

ches
~ Anonymní uživatel
9 příspěvků
1. 1. 2008   #1
-
0
-

Ahoj, řeším problém se kterým si niko neví rady. Potrebuji kdyz dostanu pismenko A aby ho zmenil na B, B na C, C na D ...
tendle problem mam vyreseny pomoci:
$text = "A";
echo strtr($text, "ABCDEFGHCHIJKLMNOPQRSTUVWXYZ", "BCDEFGHCHIJKLMNOPQRSTUVWXYZA");

problem nastane u pismenka CH to mi to nahradi HI ale ma byt nahrazeno I.
Nevite nekdo jak se to da vyresit?

Nahlásit jako SPAM
IP: 88.146.167.–
hrach
~ Redaktor
+1
Boss
1. 1. 2008   #2
-
0
-

hm, pismenko ch neexistuje :) takze, uprime, o nicem jednoduchym nevim...pokud ale chces neco sifrovat.. . tak bych to vubec neresil a mrkl se na funkce char() a ord()

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
ench0
Stálý člen
2. 1. 2008   #3
-
0
-

To hrach : v manuálu není char() ale je chr() ;-)

Nahlásit jako SPAM
IP: 88.146.205.–
I programování je pudová záležitost. Buď to pude, nebo to nepude
Prog.0
Věrný člen
2. 1. 2008   #4
-
0
-
Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
hrach
~ Redaktor
+1
Boss
2. 1. 2008   #5
-
0
-

To ench : pardon :) nechal jsem se unest :)

To Prog. :
myslel jsem toto:

CH nemá vlastnú pozíciu a je teda reprezentovateľné iba postupnosťou ASCII znakov "c" a "h" ("C" a "h", "C" a "H")

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
Prog.0
Věrný člen
2. 1. 2008   #6
-
0
-

To hrach : jj, chapeme sa, bol to len taky little podpich ;-)

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
pecan9870
Věrný člen
2. 1. 2008   #7
-
0
-

No delal bych to tak ze bych si ziskal ASCII hodnotu toho pismena, pricetl k ni jedna a vypsal, a pokud by se hodnota == hodnote Z, tak prepsat na A..

Takze vlastne jak psal hrach funkce chr() a ord()

Nahlásit jako SPAM
IP: 80.78.146.–
ches
~ Anonymní uživatel
9 příspěvků
2. 1. 2008   #8
-
0
-

Posledni reseni se mi libi a prijde mi rozumne. Ale nevim jak ziskat ASCII hodnotu pismene a pricist k ni jedna a vypst. Myslel jsem jestli neni nice jako s cisly ze je hodim do promene $cislo++ a je hotovo. Sl ASCII mi to prijde podobne ale nevim jak s tim zachazet. Poradite? Rekneme ze mam:

$pismeno = 'CH';
//a chci o uroven vetsi pomoci ASCII

Dekuji

Nahlásit jako SPAM
IP: 88.146.167.–
hrach
~ Redaktor
+1
Boss
2. 1. 2008   #9
-
0
-

To ches : ch prave v ascii neni

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
Zelenáč0
Posthunter
3. 1. 2008   #10
-
0
-

A co neco takoveho?



$text = "CHAHA";

// CHAHA -> !AHA
$text = str_replace("CH","!",$text);

// !AHA -> IB!B
$text = strtr($text, "ABCDEFGH!IJKLMNOPQRSTUVWXYZ", "BCDEFGH!IJKLMNOPQRSTUVWXYZA");

// IB!B -> IBCHB
$text = str_replace("!","CH",$text);

Nahlásit jako SPAM
IP: 89.176.254.–
pecan9870
Věrný člen
3. 1. 2008   #11
-
0
-

To ches : Nejlepší by bylo smířit se s tím že písmenko CH prostě není a nebo vyzkoušet tu Zelenáčovu metodu.

Jinak ascii hodnotu např. A získáš takto:



$ascii=ord(A);
$ascii++;
$prevedeny_znak = chr($ascii); //mělo by být B


A na takovém principu budeš převádět celý řetězec, ale nezapomeň na tu výjimku u Z, jinak tam budeš mít nějaké nesmyslné znaky :) (prostě to co následuje v ASCII tabulce za Z, http://cs.wikipedia.org/wiki/ASCII )

Nahlásit jako SPAM
IP: 80.78.146.–
Prog.0
Věrný člen
3. 1. 2008   #12
-
0
-

Nechapem co mate proti mojmu rieseniu ?

Prog. napsal:
return strtr($text, Array('ch', 'a', b', 'c', ... ), Array('i, 'b', 'c', 'd', ...)); ...



To ches : Prečo vlastne potrebuješ to písmeno ch kodovať ako jedno písmeno? Nestačí ho chápať jednoducho ako dva znaky c, h ? Tie sa jednoducho prevedú na d, i.

To pecan987 : Máš tam chybiču, chýbajú ti uvodzovky:

$ascii=ord("A");



To ches: Pozri si http://www.php.net/str_rot13 http://www.php.net/str_rot13, dole v prispevkoch sa riesilo nieco podobne...

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
ches
~ Anonymní uživatel
9 příspěvků
3. 1. 2008   #13
-
0
-

nechci jej kodovat. Jede mi o to ze mam databazi a kazdy novy zaznam musi mit pridelene pismenko abecedy vyssi nez to posledni aktualni v databazi. Vcetne prave ch.

Popis.

Admin klikne na tlacitko novy zaznam. Script provede vyhledani v databazi nejvyssiho pismene a cisla (A1, B1 ...) Zjisti ze nejvyssi je treba C1 tak chci aby pro novy zaznam nastavil D1 a kdyz bude nalezeno posledni pismeno Z(1 nebo jine cislo) nastavi zase A ale bude mit cislo o uroven vyssi. Takze A2. A tak porad dokola az treba do A55.

Nahlásit jako SPAM
IP: 88.146.167.–
ches
~ Anonymní uživatel
9 příspěvků
3. 1. 2008   #14
-
0
-

no tak

$ascii=ord('A');
$ascii++;
$prevedeny_znak = chr($ascii); //mělo by být B
echo $prevedeny_znak; // je opravdu B

ale problem je zase s tim CH. To mi vrati D. Bere jen C. Da se to nejak zaridit?

tu funkci s tim polem jsem resil takto ale nefunguje mi. vraci porad poseldni pismenko $bez

$s = array("a","b","c");
$bez = array("b","c","a");
$hotovo = str_replace($s, $bez, $text);

Nahlásit jako SPAM
IP: 88.146.167.–
Prog.0
Věrný člen
3. 1. 2008   #15
-
0
-

Uf, atypicke cislovanie :-D

Samozrejme ze pri ch bude problem, pretoze ch nie je jeden znak, ale dva znaky, ch nema vlastnu asci hodnotu. Preto fcia ord berie iba prvy znak, cize C.

Preco ti nefunguje ten replace neviem, mal by byt vpohode.

Co keby si sa vykaslal na vseobecny algoritmus, a napisal si to presne na tvoj pripad.
t.j. mas nejaky posledny kod, povedzme ze $last = 'CH3';
a chces vediet dalsi, takze $next.

cca takto:

if (substr($last,1,1)=='H')  // ak sa zacina na pismeno na pismeno CH

$next = 'I'.substr($last,2);
elseif (substr($last(0,1))=='Z') // ak sa zacina na pismeno Z
$next = 'A'. (intval(substr($last,1))+1);
else // ak sa zacina na hocijake ine pismeno
$next = chr(ord(substr($last(0,1))+1). substr($last,1);

// (napisane sfleku => moze obsahovat chyby)


btw, nemyslim ze je to dobry sposob, pretoze si neviem celkom predstavit to vyhladavane z databazy, zoradovanie, zistovanie posledneho zaznamu a tak,... Myslim ze rozumnejsie by bolo pouzit klasicne cisielkovanie a napisat si nejaku funkciu, ktora ti prevedie cislo na ten kod (napr 1 = A1, 2 = B1, 3 = C1, ...) a dalsiu na spatny prevod.

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
Prog.0
Věrný člen
3. 1. 2008   #16
-
0
-

To ches :

ches napsal:
...s tim polem jsem resil takto ale nefunguje mi. vraci porad poseldni pismenko $bez

$s = array("a","b","c");
$bez = array("b","c","a");
$hotovo = str_replace($s, $bez, $text);


Uz viem, jasne ze to vracia stale posledny, lebo a nahradi za b, lenze potom zisti ze b ma nahradit ze c a tak dalej... Dokonca aj ked to pole napises odzadu, tak tam bude problem s prvym a poslednym znakom, takze touto cestou asi nie :-)

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
ches
~ Anonymní uživatel
9 příspěvků
3. 1. 2008   #17
-
0
-

hazi mi to chybu na $next = 'A'.(intval(substr($last,1))+1);

ono to neni sifrovani. Jde o evidovani zvirat do databaze. Vrhu. Kazdy novy vrh zacina na nove pismenko abecedy poporade. Proto je potreba aby tam pismenka byly vsechny a aby se zajistilo ze uzivatel zadne nepreskoci chtel jsem aby to script delal automaticky. Kdyby slo vyuzit databaze jako ze seautomaticky novemu zaznamu priradi unikatni ID tak by to bylo skvele. A1, B1, C1 ... Y1, Z1, A2, B2, C2.. A15, B15, C15

Nahlásit jako SPAM
IP: 88.146.167.–
Prog.0
Věrný člen
3. 1. 2008   #18
-
0
-

Chyb tam bolo viac, opravene:

if (substr($last,0,1)=='H')  // ak sa zacina na pismeno na pismeno H 

$next = 'CH'.substr($last,1);
elseif (substr($last,1,1)=='H') // ak sa zacina na pismeno na pismeno CH
$next = 'I'.substr($last,2);
elseif (substr($last,0,1)=='Z') // ak sa zacina na pismeno Z
$next = 'A'. (intval(substr($last,1))+1);
else // ak sa zacina na hocijake ine pismeno
$next = chr(ord(substr($last,0,1))+1) . substr($last,1);
echo $next;


Hej, len si skontroluj, ako za sebou ti tie znaky idu, ci tam nebude nejaky problem s x, y, w, a inymi znakmi... Alebo, ak chces mat istotu, tak si zadefinuj vlastne pole znakov. $znaky = Array('A','B','C','D',...) a potom pracuj iba s tymto polom podobne ako s ascii tabulkov. namiesto ord($znak) pouzijes fciu array_search($znak,$znaky) a namiesto chr($pozicia) pouzijes $znaky[$pozicia].

Automaticke pridelovanie ID ti bude fungovat jednoducho, ale len s cislami. To znamena, ze strcis do DB novy zaznam bez toho aby si definoval kod a ona automaticky prideli dalsie cislo. Ale si len pri celych, alebo prirodzenych cislach (integer alebo unsigned integer). Je potom na tebe, ze v uzivatelskom prostredi toto obycajne cislo prevedies a zobrazis ho ako kod. Na to budes potrebovat fciu, ktora toto cislo prevedie na kod a mozno sa zide aj k nej inverzna....

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
ches
~ Anonymní uživatel
9 příspěvků
3. 1. 2008   #19
-
0
-

tak jsem to vyresil takto:

$i = 'CH';

switch($i)
{
case 'A': echo "B"; break;
case 'B': echo "C"; break;
case 'C': echo "D"; break;
case 'D': echo "E"; break;
case 'E': echo "F"; break;
case 'F': echo "G"; break;
case 'G': echo "H"; break;
case 'H': echo "CH"; break;
case 'CH': echo "I"; break;
case 'I': echo "J"; break;
case 'J': echo "K"; break;
case 'K': echo "L"; break;
case 'L': echo "M"; break;
case 'M': echo "N"; break;
case 'N': echo "O"; break;
case 'O': echo "P"; break;
case 'P': echo "Q"; break;
case 'Q': echo "R"; break;
case 'R': echo "S"; break;
case 'S': echo "T"; break;
case 'T': echo "U"; break;
case 'U': echo "V"; break;
case 'V': echo "W"; break;
case 'W': echo "X"; break;
case 'X': echo "Y"; break;
case 'Y': echo "Z"; break;
case 'Z': echo "A"; break;
}

a je to funkcni i s CH. Jen potrebuji jeste vyresit ze kdyz $i = 'A1' nebo $i = 'A23' nebo $i = 'CH1' ci $i = 'CH23' abych ziskal dve promene. $pismeno a $cislo abych mohl pracovat pouze s pismeny pro navyseni pismena a s cisly pro navyseni cisla pokud pismeno bude Z.

resim to takto :

$last = 'B12';
echo 'Pismeno '.substr($last,0,1); //zjistim pismeno ale jen s poctem znaku 1 kdyz bude CH tak je to zle
echo 'Cislo '.substr($last,1,5); // a zjistim cislo ale zase jen kdyz bude pocet znaku pismen jedna. S CH je to zase spatne

ale je problem ze kdyz bude pismeno CH tak ma dva znaky a to uz nemuzu nikdy vedet. Nevite nekdo?

Nahlásit jako SPAM
IP: 88.146.167.–
bukaj0
Věrný člen
3. 1. 2008   #20
-
0
-



<?php
//vrátí pole, kde na indexu 0 je první - písmenná část, na 1 je druhá - číselná (resp. zbytek)
function rozdel($str)
{
$i = 0;
while (ctype_alpha(substr($str, $i++, 1)));
$i--;
return array(
substr($str, 0, $i),
substr($str, $i));
}

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
ches
~ Anonymní uživatel
9 příspěvků
3. 1. 2008   #21
-
0
-

vraci mi to jen Array

$str = 'R13';

//vrátí pole, kde na indexu 0 je první - písmenná část, na 1 je druhá - číselná (resp. zbytek)
function rozdel($str)
{
$i = 0;
while (ctype_alpha(substr($str, $i++, 1)));
$i--;
return array(
substr($str, 0, $i),
substr($str, $i));
}
echo rozdel($str);

zkousim to resit:

$ia = 'R13';
$num = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
for($y=0;$y<count($num);$y++):
$vysledek = eregi_replace($num[$y], "", $ia);
endfor;
echo 'cislo'.$vysledek;

kde chci odstarnit cisla a ziskat tak jen pismena ale nejak mi to nechce nic provadet

Nahlásit jako SPAM
IP: 88.146.167.–
bukaj0
Věrný člen
3. 1. 2008   #22
-
0
-

ches
vraci mi to jen Array
Ne, vrací to pole. "Array" je textová reprezentace pole, pokud ho vypisuješ pomocí echo. Používej var_dump() - http://php.net/var_dump.

Takže:
list($pismeno, $cislo) = rozdel('R13'); //nyní je v $pismeno "R" a v $cislo "13"
list($pismeno, $cislo) = rozdel('CH25'); //nyní je v $pismeno "CH" a v $cislo "25"

Edit: A pokud chceš odstranit z řetežce čísla, tak:



<?php
function bez_cisel($retezec)
{
$bez_cisel = '';
for ($x = 0; ($c = substr($retezec, $x, 1)) !== false; $x++) {
if (!ctype_digit($c)) {
$bez_cisel .= $c;
}
}
return $bez_cisel;
}

//příklad použití:
bez_cisel('A1B2C3'); //vrátí 'ABC'


PS. Doporučuji ti projít si seriál na Linuxsoftu (http://linuxsoft.cz/php).

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
ches
~ Anonymní uživatel
9 příspěvků
4. 1. 2008   #23
-
0
-

Díky moc vsem. Mám jeste konzultacni otazku.

Mam DB abeceda:

id/pismenko
1 A1
2 B1
3 C1
.
.
.
7 A2
.
.

a dotazem chci vytahnout nejvyssi pismeno s cislem a vim ze nejvyssi id je i nejvyssi pismenko s cislem. da se dotaz nejak vylepsit ci upravit?

$x = mysql_query('SELECT MAX(id) AS maxid FROM abeceda');
$row = mysql_fetch_assoc($x);
$dotazVrh = mysql_query('SELECT * FROM abeceda WHEREid="'.$row['maxid'].'"');
$vrh = mysql_fetch_array($dotazVrh);
echo 'pismenko a cislo '.$vrh['vrh_nazev'];

Diky moc

Nahlásit jako SPAM
IP: 88.146.167.–
pecan9870
Věrný člen
4. 1. 2008   #24
-
0
-

nestačilo by:
SELECT pismenko FROM abeceda ORDER BY id DESC LIMIT 1 ??

Nahlásit jako SPAM
IP: 80.78.146.–
ches
~ Anonymní uživatel
9 příspěvků
4. 1. 2008   #25
-
0
-

no stacilo to me nenapadlo :O) DIIKY

Nahlásit jako SPAM
IP: 88.146.167.–
Architekt0
Super člen
5. 1. 2008   #26
-
0
-

Jen skromný dotaz, proč tam potřebuješ i písmeno "ch"? Nějak mi uniká smysl. V anglické abecedě a ASCII "ch" neexistuje a jen si tím při programování komplikuješ život. A kdybys to chtěl řadit podle české abecedy, chybí ti tam ještě č,ď,ň,ř,š,ť,ž.

Nahlásit jako SPAM
IP: 213.192.22.–
Python + Django + PostgeSQL = spokojený vývojář :-)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

Morseova abeceda — založil Pól Bulva

Morseova abeceda — založil hejnallukas

Morseova abeceda — založil Montezo

Abeceda pes metody — založil Michal

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý