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
-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
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
$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
Čeluk:
Rozumíš trochu tomu, co vlastně děláš? Bestikův kód s tím tvým vůbec nesouvisí.
Čeluk
Profil
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++;
Takto? (Podotýkám, že v případě, že je $string menší než 1000 a prefixovaný nulami, tak ty nuly zmizí.)
Čeluk
Profil
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
Čeluk:
Řádek 4 zaměň za:
echo $string < 9999 ? $string + 1 : $string;
bestik_63
Profil
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
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
což ale vytvoří 0 a ne 0000. Takže je to potřeba to naformátovat.

$number = (int) substr(preg_replace( '/\D/', '', $_GET['ankety']), -4);
if($number < 9999) {
    $number++;
}
printf("%'04d\n", $number);
Fisir
Profil
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
Č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
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
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
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
Čeluk:
To máš chybu někde jinde. Takhle jak to je to funguje.
Fisir
Profil
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: