Autor | Zpráva | ||
---|---|---|---|
Čeluk Profil |
Dobrý den, mám PHP kód který mi vypisuje z 20 čísel poslední 4
<?php $string = $_GET['ankety']; $string = substr(preg_replace( '/\D/', '', $string), -4); echo $string; ?> toto: XXXXXXXXXXXXXXXX4589 = 4589 Já bych potřeboval aby to vypisovalo né poslední 4 ale čísla na 5, 6, 7, 8 místě od konce. toto: XXXXXXXXXXXX4585XXXX = 4585 Předem moc děkuji za jakoukoliv radu, aď doplním co doplním tak mi to nefunfuje. |
||
mimochodec Profil |
php.net/manual/en/function.substr.php
Konkrétnější nejsem záměrně. Myslím, že když už ne najít si vhodnou funkci v dokumentaci, tak aspoň umět ji pochopit je prostě potřeba. |
||
juriad Profil |
#3 · Zasláno: 19. 11. 2015, 12:00:36
-8, 4 |
||
Čeluk Profil |
to jsem právě zkoušel ale když doplním 20,4); tak mi to nezobrazí ani jedno číslo
juriad: Super, díky moc to je ono. Děkuji |
||
bestik_63 Profil |
#5 · Zasláno: 19. 11. 2015, 12:12:25
pro lepší pochopení :
$cislo = "12345678901234567890"; echo substr($cislo,0,12)."<span style=\"color:red\">".substr($cislo,12,4)."</span>".substr($cislo,16,4); |
||
Čeluk Profil |
bestik_63:
ok, děkuji moc juriad: Můžu se ještě zeptat jestli by šlo udělat aby se k té původní verzi (poslední 4 čísla) přičetla jednička? To už asi není technicky možné co? Děkuji za odpověď |
||
bestik_63 Profil |
#7 · Zasláno: 19. 11. 2015, 13:26:04
$cislo = "12345678901234567890"; echo substr($cislo,0,12)."<span style=\"color:red\">".(intval(substr($cislo,12,4))+1)."</span>".substr($cislo,16,4); |
||
Čeluk Profil |
bestik_63:
Dík, ale nešlo by to dyštak nějak vložit sem? <?php $string = $_GET['ankety']; $string = substr(preg_replace( '/\D/', '', $string), -4); echo $string; ?> aby to přidalo číslo jedna. Teď to vypíše třeba 5652 , tak aby to vypsalo 5653. Děkuji Když to napíšu takto -4)+1; tak se mi jednička přičte ale zobrazí se mi jen 3 čísla proč? |
||
mimochodec Profil |
#9 · Zasláno: 19. 11. 2015, 14:16:06
Čeluk:
Rozumíš trochu tomu, co vlastně děláš? Bestikův kód s tím tvým vůbec nesouvisí. |
||
Čeluk Profil |
#10 · Zasláno: 19. 11. 2015, 14:47:06
Mě to funguje takto:
<?php $string = $_GET['ankety']; $string = substr(preg_replace( '/\D/', '', $string), -4)+1; echo $string; ?></a> Ale problém je že když mám 9999 tak to udělá 10000 a já potřebuji maximálně 4 čísla. Prostě aby to nevypsalo 5 čísel když se dostanu na 9999 |
||
mimochodec Profil |
Čeluk:
„Můžu se ještě zeptat jestli by šlo udělat aby se k té původní verzi (poslední 4 čísla) přičetla jednička?“ versus „Ale problém je že když mám 9999 tak to udělá 10000 a já potřebuji maximálně 4 čísla. Prostě aby to nevypsalo 5 čísel když se dostanu na 9999“ Zapracuj víc na jednoznačnosti zadání. Co přesně chceš za výsledek, když to čtyřčíslí je 9999? |
||
Čeluk Profil |
To první už mám vyřešené. Ještě bych potřeboval aby to původní vypsalo maximálně 4 poslední čísla a né 5 když je 9999 tak se vypíše 10000
toto <?php $string = $_GET['ankety']; $string = substr(preg_replace( '/\D/', '', $string), -4)+1; echo $string; ?></a> Nechtěl jsem zakládat nové téma no. kdyby šlo třeba nějak napsat if >9999 +1; jinak nic nepřičítat. Ale to mi nefunguje |
||
Fisir Profil |
Reaguji na Čeluka:
$string = (integer) substr(preg_replace( '/\D/', '', $string), -4); if(9999 > $string) $string++; $string menší než 1000 a prefixovaný nulami, tak ty nuly zmizí.)
|
||
Čeluk Profil |
#14 · Zasláno: 19. 11. 2015, 15:52:47
Jak to bude kompletní? Takto mi to nefunguje:
<?php $string = $_GET['ankety']; $string = (integer) substr(preg_replace( '/\D/', '', $string), -4); echo if(9999 > $string) $string++; ?> |
||
Dan Charousek Profil |
#15 · Zasláno: 19. 11. 2015, 16:18:28
Čeluk:
Řádek 4 zaměň za: echo $string < 9999 ? $string + 1 : $string; |
||
bestik_63 Profil |
#16 · Zasláno: 19. 11. 2015, 16:53:07
jestli to chápu správně tak by při 9999 to mělo přeskočit 0000?
V tom případě by tam asi měla být ještě podmínka při přeskočení 9999 aby $string = 0000. V tom případě pozor na typ proměnné $string. Ta nebude 0000 ale 0. |
||
Keeehi Profil |
#17 · Zasláno: 19. 11. 2015, 17:09:35
bestik_63:
Chápeš to špatně. Ale pokud by to tak mělo být, pak není potřeba žádná podmínka. Šlo by to napsat takto ($string + 1)%10000 $number = (int) substr(preg_replace( '/\D/', '', $_GET['ankety']), -4); if($number < 9999) { $number++; } printf("%'04d\n", $number); |
||
Fisir Profil |
#18 · Zasláno: 19. 11. 2015, 17:13:42
Reaguji na Čeluka:
Kristepane, doporučuji zapojit mozek a nějakou učebnici PHP. <?php $string = $_GET['ankety']; $string = (integer) substr(preg_replace( '/\D/', '', $string), -4); if(9999 > $string) $string++; echo $string; ?> Reaguji na bestika_63: „jestli to chápu správně tak by při 9999 to mělo přeskočit 0000?“ Ne, při hodnotě 9999 se ta jednička zkrátka nepřičte.
„pozor na typ proměnné $string. Ta nebude 0000 ale 0.“ Nejen v mém kódu, ale už v tom v příspěvku [#10]. Jestli opravdu potřebuje takto zvláštně tajtrlíkovat s formátem čísel, snad si Čeluk sám dokáže najít, jak řetězec prefixovat, případně použije řešení v [#17]. |
||
mimochodec Profil |
#19 · Zasláno: 19. 11. 2015, 17:24:50
Čeluk:
> kdyby šlo třeba nějak napsat > if >9999 +1; > jinak nic nepřičítat. Ale to mi nefunguje Tedy když je hodnota větší než 9999, přičíst jedničku. Jak může být čtyřmístné číslo větší než 9999? |
||
Čeluk Profil |
#20 · Zasláno: 19. 11. 2015, 17:30:27
Fisir:
Mě to už funguje díky moc, akorát je problém že když to začíná 0 tak se neukáže. S tím nejde něco dělat? Proč všechny čísla jdou a nula ne? |
||
Fisir Profil |
#21 · Zasláno: 19. 11. 2015, 17:38:52
Reaguji na Čeluka:
Protože je to uložené v datovém typu integer (to kvůli porovnávání a přičítání), který samozřejmě přebytečné nuly ignoruje. Je potřeba číslo naformátovat, viz [#17].
|
||
Čeluk Profil |
#22 · Zasláno: 19. 11. 2015, 17:43:39
Já to ale takto mám a pokud to začíná 0 nebo 00 tak se ty nuly neukážou proč? Mám to takto:
<?php $number = (int) substr(preg_replace( '/\D/', '', $_GET['ankety']), -4); if($number < 9999) { $number++; } printf("%'04d\n", $number); ?> |
||
Keeehi Profil |
#23 · Zasláno: 19. 11. 2015, 17:48:26
Čeluk:
To máš chybu někde jinde. Takhle jak to je to funguje. |
||
Fisir Profil |
#24 · Zasláno: 19. 11. 2015, 17:48:59
Reaguji na Čeluka:
Kde se ty nuly neukážou? Tvůj kód mi při parametru ankety=0045 správně vypíše 0046 .
|
||
Čeluk Profil |
#25 · Zasláno: 19. 11. 2015, 17:55:48
Já jsem takovej vůl. Promiňte chyba byla u mě. Špatně jsem to zkopíroval. Jasně že to funguje. Díky moc a omlouvám se. Díky
|
||
leorond Profil |
#26 · Zasláno: 19. 11. 2015, 22:10:00
www.functions-online.com/strlen.html Doporučuji :) moc mi to pomohlo když jsem nevěděl nejen jak získat část řetězce ale spoustu dalších funkcí které jsem si mohl i vyzkoušet.
|
||
Časová prodleva: 8 let
|
0