Autor | Zpráva | ||
---|---|---|---|
Fisak Profil |
#1 · Zasláno: 24. 12. 2012, 16:16:12
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 |
#3 · Zasláno: 24. 12. 2012, 17:12:31 · Upravil/a: Fisak
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 |
#4 · Zasláno: 24. 12. 2012, 17:37:49
$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 |
#6 · Zasláno: 24. 12. 2012, 17:47:43
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 |
#7 · Zasláno: 24. 12. 2012, 17:49:37
Fisak:
No a v čem je problém? textovyplugin($text,explode(";",$textzdb)); |
||
Radek9 Profil |
#8 · Zasláno: 24. 12. 2012, 18:11:28
Fisak:
Ve volných chvílích si můžeš číst PHP manuál, zvlášť návratové hodnoty. Máš v tom maglajs. |
||
Kcko Profil |
#9 · Zasláno: 24. 12. 2012, 18:48:16
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")); explode(delimiter, string); |
||
Fisak Profil |
#10 · Zasláno: 24. 12. 2012, 20:46:36
Kcko:
stačilo napsat že to jde "textovyplugin($text,explode(";",$textzdb));" že explode vrací array |
||
Prochy Profil |
#11 · Zasláno: 24. 12. 2012, 20:53:51
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 |
#12 · Zasláno: 24. 12. 2012, 20:57:39
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 |
#13 · Zasláno: 24. 12. 2012, 21:04:17
trim |
||
Fisak Profil |
#14 · Zasláno: 24. 12. 2012, 21:23:30
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)); |
||
Tori Profil |
#15 · Zasláno: 24. 12. 2012, 21:27:09
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 |
#16 · Zasláno: 24. 12. 2012, 21:36:53
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 |
#17 · Zasláno: 24. 12. 2012, 21:41:28
Aby foreach fungoval musí projít podmínka is_array().
|
||
Tori Profil |
#18 · Zasláno: 24. 12. 2012, 21:44:57
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 |
#19 · Zasláno: 24. 12. 2012, 21:58:45
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) { ... 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 |
#24 · Zasláno: 24. 12. 2012, 22:41:25
Tori:
Díky za odpověď! |
||
Časová prodleva: 11 let
|
0