Výpis polí
Řekněme, že máme pole, jehož prvky chceme vypsat oddělené čárkami. Viděl jsem už spoustu pokusů, jak na to:
<?php // neelegantní $first = true; foreach ($pole as $val) { if (!$first) { echo ", "; } echo $val; $first = false; } // neelegantní $tisk = ""; foreach ($pole as $val) { $tisk .= ", $val"; } echo substr($tisk, 2); // to je ono echo implode(", ", $pole); ?>
Funkce implode se dá použít i ve složitějších případech, někdo to ale už považuje za prasárnu:
<?php echo "<tr><td>" . implode("</td><td>", $pole) . "</td></tr>\n"; mysql_query("SELECT * FROM tabulka WHERE id IN ('" . implode("', '", $pole) . "')"); ?>
Diskuse
Lampa:
k mysql_query proc prasarna ?kdyz mam pole obsahujici 300 zaznum s id a potrebuji je vybrat tak to mam udelat jak
a) 300 dotazu - nejsem prase ?
b) pouziji implode a udelam pouze jeden dotaz - jsem prase ?
Jakub Vrána
:
Jeden dotaz místo 300 je samozřejmě v pořádku, někomu ale přijde přehlednější kód
<?php
foreach ($pole as $key => $val) {
$pole[$key] = "'$val'";
}
mysql_query("SELECT * FROM tabulka WHERE id IN (" . implode(", ", $pole) . ")");
?>
V těch apostrofech a uvozovkách se dá snadno zabloudit.
Podotýkám, že já osobně to za prasárnu nepovažuji.


Honza007:
Implode je super. Ale v kombinaci s SQL dotazem bych chtel upozornit, ze je zde velky problem toho co obsahuji polozky pole. Takze se nevyhnete tomu, ze musite projit kazdou polozku a kontrolovat pritomnost apostrofu. Ten foreach by mel tedy kontrolovat toto, pokud ne je tam zbytecny protoze jeho soucasna funkce se da provest samotnym implodem:<?php
mysql_query("SELECT * FROM tabulka WHERE id IN ('" . implode("',' ", $pole) . "')");
?>
PS: otazkou je kdy se to stane neprehledne a prasarnou ;o)
Jan Veselý:
Problém s IN() je spíše v tom, že v případě většího počtu položek je hodně pomalé a mělo by se používat maximálně na řádově desítky položek. Pevné maximum je tuším 1500, ale nevím jestli pro MySQL, každopádně bychom se k tomuto číslu rozhodně neměli ani přiblížit :)Jinak konstrukce s implode je dle mého v pořádku a také bych to neoznačoval za "prasárnu", spíše naopak.
F. Augusztin:
A co toto ? Je to "prasarna" alebo nie ? :-)<?php
$query_list = array();
$query_list[]= "SELECT aaa FROM tabulka1";
$query_list[]= "SELECT bbb FROM tabulka2";
$query_list[]= "SELECT ccc FROM tabulka3";
$query = implode(" UNION ", $query_list);
mysql_query($query);
?>
Abraxis:
Tyhle veci vypadaji vzdycky samy o sobe "neskodne", ale zalezi na kontextu a na konkretnim ucelu pouziti (zda nemam nahodou zdrbany navrh tabulek, kdyz musim delat takove silenosti apod.)Lampa:
no pokud to jsou 3 ty selecty, tk nevim mozna byx to nacpal do jedne radky :) ale vypada to ne-prasacky :)pif:
dobrej postreh, vzpominam si, jak jsem to kdysi resil tou prvni variantou :)
Havran:
Tak, tak - je pravdou ze tomuto pouzivaniu implode ma naucil az Python ;-).Michal Tuláček:
Tak minimálně bych ještě přidal někam ošetření, že mi do implde neleze něco jiného než pole... jinak to dělá nepěknou slotu...Bjarne:
No zatim mi to nepripada, ze by tu bylo neco pokrocileho. Pripada mi to jako seznamovani se s knihovnou fci a jazykem...Pavel Zbytovský:
Tuhle funkci jsem taky objevil už v manuálu.
Yuhů:
> máme pole, jehož prvky
co jsou to prosím prvky? To jako hodnoty?

Niki:
Nahodou ja to donedavna taky delala tou prvni variantou nez jsem nekde narazila na tu s implode - proste me to samu od sebe nenapadlo...Jen tak dal Nika.
Uncode:
mam řetězec:$a="něco"
a chci ho prevest na pole:
<?php
$b[0]=n;
$b[1]=ě;
$b[3]=c;
$b[4]=o;
?>
jak se to da provest? fce explode() se zda nepouzitelna..
Jakub Vrána
:
Slouží k tomu funkce str_split().


kuba:
echo "<tr><td>" . implode("</td><td>", $pole) . "</td></tr>\n";
Tohle mi přijde jako moc pěkný příklad, ale nějak si neumím poradit s tím, jak pustit na jednotlivé prvky pole htmlspecialchars()
Jakub Vrána
:
<?php implode("</td><td>", array_map('htmlspecialchars', $pole)); ?>


Diskuse je zrušena z důvodu spamu.

