Diskuze: PHP - změna textu

PHP PHP PHP - změna textu American English version English version

Avatar
jelacic
Člen
Avatar
jelacic:

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. září 16:28
Avatar
Oxtimus
Člen
Avatar
Oxtimus:

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 2. září 16:41
Avatar
Odpovídá na jelacic
Dominik Gavrecký:

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. září 17:11
Nahoru Odpovědět 2. září 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:

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. září 9:03
Avatar
Odpovídá na jelacic
Dominik Gavrecký:

Nerozumiem co máš na mysli ...

Nahoru Odpovědět 5. září 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:

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. září 9:35
Avatar
Oxtimus
Člen
Avatar
Odpovídá na jelacic
Oxtimus:

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. září 10:20
 
Nahoru Odpovědět 5. září 10:19
Avatar
jelacic
Člen
Avatar
jelacic:

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

 
Nahoru Odpovědět 5. září 10:27
Avatar
Odpovídá na jelacic
Michal Brusel Bursík:
$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. září 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.