NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: PHP - změna textu

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
jelacic
Člen
Avatar
jelacic:2.9.2016 16:28

Ahoj, omlouvám se, že zakládám další vlákno :-) Mám ale problém, který mě už dohání k šílenství.
Potřeboval bych aby když obsah proměnné začíná například na číslo 1 aby se vypsalo slovu hruška a když na číslo 2 tak slovo jablko.

$vstup = "199878252";

$ovoce = array (
'1' => 'hruska',
'2' => 'jablko'
);

echo str_replace(a­rray_keys($ovo­ce), array_values($o­voce),$vstup);

když použiji toto tak je vysledek:
hruska99878252

a já bych potřeboval aby to bylo jen hruska. str_replace nebude asi to pravé. Může mě někdo prosím nasměrovat správně ? Předem děkuji. Tom

 
Odpovědět
2.9.2016 16:28
Avatar
Michal
Člen
Avatar
Michal:2.9.2016 16:41

Ahoj, pokud jsem to dobře pochopil, šlo by to takto:

$vstup = "199878252";
$ovoce = array (
'1' => 'hruska',
'2' => 'jablko'
);
$prvniZnak = substr($vstup, 0, 1);
echo $ovoce[$prvniZnak];
 
Nahoru Odpovědět
2.9.2016 16:41
Avatar
Odpovídá na jelacic
Dominik Gavrecký:2.9.2016 17:11

Ja by som to riešil takto samozrejme ak nutne nepotrebuješ použitie toho array. Je to len príklad pre rozšírenie znalosti

$vstup = "2218818";
$first = substr($vstup, 0, 1);

switch ($first){
    case "1":
        echo "1";
        break;
    case  "2":
        echo "2";
        break;
    default:
        echo "Ani jedna z možností";
Editováno 2.9.2016 17:11
Nahoru Odpovědět
2.9.2016 17:11
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
jelacic
Člen
Avatar
jelacic:5.9.2016 9:03

Moc děkuju za pomoc. Zkusil jsem obě metody a funguje to. Jen mám problém pokud mi $vstup začíná například na 34 nebo 443. substr($vstup, 0, 1); mi vezme první znak, ale co když mi bude $vstup začínat na 2 nebo 3 cifernou hodnotu ??? Jde to nějak ošetřit ?

 
Nahoru Odpovědět
5.9.2016 9:03
Avatar
Odpovídá na jelacic
Dominik Gavrecký:5.9.2016 9:11

Nerozumiem co máš na mysli ...

Nahoru Odpovědět
5.9.2016 9:11
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
jelacic
Člen
Avatar
jelacic:5.9.2016 9:35

Promiň, zkusím to popsat na jiném příkladu. Někdo mi přes formulář vloží do $vstup číslo 420123456789 a já potřebuju toto změnit na "česko", když to bude 421123456789 tak zase na "slovensko", ale také když to bude třeba 45123456789 tak to změnit na "dánkso"...

 
Nahoru Odpovědět
5.9.2016 9:35
Avatar
Michal
Člen
Avatar
Odpovídá na jelacic
Michal:5.9.2016 10:19

Jestliže se délka začátku proměnné $vstup mění, tak musíš dát svému algoritmu najevo, jako délku zrovna teď chceš:

$vstup = '420123456789';

$zeme= array (
'4' => 'Země nezemě',
'420' => 'Česko'
);
// Vstup začíná na 4, ale i na 420, co z toho se má vybrat?

Pokud chceš vybrat vždy to nejdelší (takže z 4 a 420 se vybere právě 420), pak bys musel procházet pole a zjišťovat, jaký nejdelší klíč se shoduje se vstupem:

$vstup = '420123456789';

$zeme= array (
'4' => 'Země nezemě',
'420' => 'Česko'
);

for ($i = 0, $l = strlen($vstup); $i < $l; $i++) {
   $cast = substr($vstup, 0, $l - $i);
      if (isset($zeme[$cast])) {
         echo $zeme[$cast];
         break;
      }
}

Tento algoritmus zapřičiní, že se bude $vstup v cyklu postupně zkracovat a zkoušet, zda byl nalezen v poli:

$vstup = '420123456789';

// existuje $zeme['420123456789']?
// existuje $zeme['42012345678']?
// existuje $zeme['4201234567']?
// existuje $zeme['420123456']?
// existuje $zeme['42012345']?
// existuje $zeme['4201234']?
// existuje $zeme['420123']?
// existuje $zeme['42012']?
// existuje $zeme['4201']?
// existuje $zeme['420']? ANO - zastav cyklus a vypiš $zeme['420']
Editováno 5.9.2016 10:20
 
Nahoru Odpovědět
5.9.2016 10:19
Avatar
jelacic
Člen
Avatar
jelacic:5.9.2016 10:27

tak tohle je vyčerpávající odpověď. Moc děkuju. Jdu to zkusit.

 
Nahoru Odpovědět
5.9.2016 10:27
Avatar
Odpovídá na jelacic
Michal Brusel Bursík:5.9.2016 10:48
$vstup = "199878252";
$ovoce = array (
'1' => 'hruska',
'2' => 'jablko'
);
$prvniZnak = substr($vstup, 0, 1);
echo $ovoce[$prvniZnak];

Pocet znaku urcujes tim kolik vratis z funkce substr do promenne $prvniZnak. Tedy, pokud chces porovnavat 3 ciselne kombinace tak bych zvolil:

$prvniZnak = substr($vstup, 0, 3);

Pro ruzny pocet nejspis cyklus.

 
Nahoru Odpovědět
5.9.2016 10:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.