Autor Zpráva
Fisak
Profil
Dobrý den.
Rád bych převedl pomocí explode výsledek z DB: "jedna;dva;tři" do array... tzn. array("jedna", "dva", "tři"); dokázal by mi prosím někdo poradit jak na to?
Kcko
Profil
V čem máš konkrétní problém?

$pole = explode(";", $row);
Fisak
Profil
Kcko:
vím jak se používá explode :-) ale nevím jak docílit toho aby to šlo do array jako udělat
$text = "jedna;dva;tři";
$fy = explode(";", $text);
$vysledek = array($fy);
to asi těžko pujde takto :-)


jde mi o to aby ten $vysledek = array("jedna", "dva", "tři");
Tori
Profil
$pozadovanyVysledek === $fy, tipuju.
Kcko
Profil
Fisak:
No očividně explode použít tedy neumíš.

$text = "jedna;dva;tři";
$vysledek  = explode(";", $text); 

Explode Ti to do pole roztrhá automaticky.
Fisak
Profil
Kcko:
Panebože... já vím že mi to roztrhá automaticky ale mam funkci kam to potřebuju vložit do array... tzn
textovyplugin($text, array("textovyplugin1", "textovyplugin2", "textovyplugin3")); a v db máš napsáno v jednom sloupci co je v tom array ale ve tvaru "textovyplugin1;textovyplugin2;textovyplugin3".
Someone
Profil
Fisak:
No a v čem je problém?

textovyplugin($text,explode(";",$textzdb));
Radek9
Profil
Fisak:
Ve volných chvílích si můžeš číst PHP manuál, zvlášť návratové hodnoty. Máš v tom maglajs.
Kcko
Profil
Fisak:
"jedna;dva;tři" do array... tzn. array("jedna", "dva", "tři");


Fisak:
Panebože... já vím že mi to roztrhá automaticky ale mam funkci kam to potřebuju vložit do array... tzn
Bůh nejsem. Bylo by ovšem fajn, kdyby ses naučil vyjadřovat jako člověk, aby Ti bylo rozumět hned napoprvé.

array("textovyplugin1", "textovyplugin2", "textovyplugin3"));
Chápeš že to je pořád to

explode(delimiter, string);
?
Fisak
Profil
Kcko:
stačilo napsat že to jde "textovyplugin($text,explode(";",$textzdb));" že explode vrací array
Prochy
Profil
Fisak:
Bylo by dobré, kdyby ses první podíval do manuálu a zbytečně tady nezatěžoval diskuzi s takovými primitivními dotazy.
Fisak
Profil
Ještě dotaz. Dá se nějakým způsobem detekovat že je to ";" na začátku a na konci toho stringu? tzn. když je ve stringu ";neco;neco;neco;" tak mi to hází chybu... takže to musí být jen ve tvaru "neco;neco;neco"
Prochy
Profil
trim
Fisak
Profil
Paráda děkuji... funguje to .. jen poslední věc která mi nějak nefachá ..
function text_plugins($text, $string)
{
    foreach ($string as &$value) {
    
        require('explode/'.$value.'.php');
    
    }

return $text;
}
$exp = trim("", ";");
$textik = "";
echo text_plugins($textik, explode(";", $exp));
pokud je $exp prázdný tak to hlásí chybu... zkoušel jsem dát podmínku do té funkce if(!empty($string)) ale nefunguje to...
Tori
Profil
Fisak:
zkoušel jsem dát podmínku do té funkce
A nebylo by lepší vyčistit vstupní hodnoty ještě před voláním funkce (tak aby tam bylo vždy pole, byť prázdné)?
Fisak
Profil
Tori:
jak to myslíte?
Zkusil sem ještě způsob:
function text_plugins($text, $string = "0")
{
    if($string != "0") {
    foreach ($string as &$value) {
    
        require('explode/'.$value.'.php');
    
    }
    }

return $text;
}

ale také to nefunguje...
Prochy
Profil
Aby foreach fungoval musí projít podmínka is_array().
Tori
Profil
Fisak:
jak to myslíte?
No, "před voláním funkce" opravdu neumím říct jinak a jasněji. Takle:
$exp = trim($nejakaData, ";");
$exp = !empty($exp) ? explode(";", $exp) : array();
$textik = '';
echo text_plugins($textik, $exp);
Fisak
Profil
Tori:
Děkuji moc. Funguje to ..
Tori
Profil
Jinak v podobných případech máte několik různých možností, záleží na situaci/návrhu/kontextu, kterou použijete:

1) funkce explicitně vyžaduje určitý datový typ na vstupu:
function foo(array $bar) { ...
- Předání něčeho jiného než pole způsobí fatal error, tzn. na podobné ošetření vstupu před předáním param. funkci jako v [#18] musíte myslet předem.

2) funkce akceptuje více různých dat.typů, ale pracovat umí jen s jedním. Tzn. kontrola typu a ignorace nebo vyhození chyby se musí realizovat ve funkci.
function foo($bar) {
  if (!is_array($bar)) { return null; }
  // nebo:
  if (!is_array($bar)) throw new InvalidArgumentException("Funkce foo očekává na vstupu pole!");

  // ... následuje standardní zpracování

3) funkce akceptuje více různých dat.typů, se kterými umí pracovat a podle potřeby si je zkonvertuje na jiný typ.
function foo($bar = '') {
  if ($bar === '') return null;  // prázný vstup se ignoruje
  if (is_string($bar) || is_int($bar)) $bar = (array) $bar;  // řetězec a číslo se přetypuje na pole
  else throw new InvalidArgumentException("Funkce foo očekává na vstupu pole!"); // ostatní hodnoty nejsou akceptovány
  // ... následuje zpracování, v $bar je teď na 100% pole.

asi bude i jiná, předpokládám, možná mě někdo doplní
Sir Tom
Profil
Tori:
A nebylo by lepší vyčistit vstupní hodnoty ještě před voláním funkce
Proč už před voláním funkce? Nebylo by lepší čistit vstupní hodnoty až ve funkci podle toho, jaký jsou datový typ a jaký mají tvar (viz 3) ve [#20])? Takhle to "čištění" bude pěkně ve funkci. Nebo třeba ještě můžu dát to "čištění" do separe funkce, která bude returnovat vyčištěný tvar...

Fisak:
stačilo napsat že to jde "textovyplugin($text,explode(";",$textzdb));" že explode vrací array
To ti už dávno napsal ve [#2] Kcko - stačilo to vyzkoušet, ale to jsi asi neudělal, viď?
Tori
Profil
Sir Tom:
To byla jen reakce na citovaný pokus použít podmínku uvnitř volání funkce jako argument. S ternárním operátorem jako výrazem by to šlo, ale o to nejde. Nebyl to výrok s absolutní platností; myslím, že dost záleží na kontextu použití.
Když to bude funkce/metoda v samostatném znovupoužitelném (a dál šiřitelném) modulu, budu spíš používat typehint (resp. DI). Zato u funkce, která má pracovat s datumem v různých formátech (např. obdoba date pro šablonový stroj nebo třeba modifikátor %dt v dibi), můžu chtít na vstupu akceptovat řetězec v různých formátech, celé číslo i DateTime.
Kcko
Profil
Sir Tom:
Spíš bude problém v tom, že tomu prostě obecně moc nerozumí.


Fisak:
Kcko:
stačilo napsat že to jde "textovyplugin($text,explode(";",$textzdb));" že explode vrací array
Navíc jsem to jasně napsal v [5], mohl sis to vyzkoušel dle [2] a máš to napsané v PHP manualu.

Měl bys trošku sklopit hlavu a nenasazovat ihned ofenzivní tón proti lidem, kteří se Ti snaží pomoci a ty to nechápeš (doslova).
Sir Tom
Profil
Tori:
Díky za odpověď!

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: