Autor Zpráva
dajusa
Profil
Zdravím Vás,
dostal jsem za úkol zpracování nějakých dat do pdf pomocí php. Mám ale problém s jednou věcí. Když si vytáhnu jeden údaj z databáze je to HTML kód, který mi vypíše tabulku. uVedu pouze příklad:
<table border = on><tr><td><font size = 2>Síť</font></td><td><font size = 2>
Ve špiččce<br/>(min)</font></td><td><font size = 2>Mimo špičku</br> (min)</font>
</td><td><font size = 2>Z toho volných<br/> minut</font></td><td><font size = 2>Cena v 
Kč<br/>(bez DPH)</font></td></tr></table>


Potřeboval bych si toto co vytáhnu z databáze rozdělit na jednotlivé části, dá se říct že v podstatě pod každý index v poli uložím obsah jedné buňky tabulky. Akorát nevím jak na to. Napadá mě to řešit nějakým regulérním výrazem, ale nemůžu přijít na to jakým. Jediné co mě napadá je že v podstatě bych vytahoval údaj mezi znaky ></ ale jen za podmínky že mezi nimi je nějaký text. Poradíte mi plsky
Díky moc
nightfish
Profil
preg_match_all("/<td>(.*)</td>/U", $retezecSTabulkou, $vystup)

a pak se podívej na obsah pole $vystup...
dajusa
Profil
nightfish

dekuju vypada to fajn ale mam problem kdyz to udelam tak jak mi pises tak mi to hodi chybu
kod mam takto:
$pokus = "<table border = on><tr><td><font size = 2>Síť</font></td><td><font size = 2>
Ve špiččce<br/>(min)</font></td><td><font size = 2>Mimo špičku</br> (min)</font>
</td><td><font size = 2>Z toho volných<br/> minut</font></td><td><font size = 2>Cena v 
Kč<br/>(bez DPH)</font></td></tr></table>";
preg_match_all("/<td>(.*)</td>/U", $pokus, $vystup);
die($vystup[0]);


A vyhodi to tuto chybu resp. varovani:
Warning: preg_match_all() [function.preg-match-all.html]: Unknown modifier 't' in 
C:\ComplexWebServer\http_docs\html2pdf\html2pdf\genfakt.php on line 43
Matty
Profil
dajusa
Zkus tohle:
preg_match_all("/<td>(.*)<\/td>/U", $retezecSTabulkou, $vystup);
BetaCam
Profil
preg_match_all("/<td>(.*)<\/td>/U", $retezecSTabulkou, $vystup)
dajusa
Profil
tak jo uz mi to neco vypisuje ale uz to neni ono.
melo by to fungovat tak ze kdyz ted dam
die($vystup[0][0]);
tak by mel vypsat Síť a to taky udělá, ale když dám
die($vystup[0][1]);
měl by vypsat Ve špiččce (min) ale místo toho vypisuje až Z toho volných minut:(
co s tím?
a taky by mě zajímalo proč z toho udělá více stupňové pole
nightfish
Profil
dajusa
sry, zapomněl jsem "escapovat" jedno lomítko, proto ta chyba

die($vystup[0][0]);
doporučuji tvé pozornosti konstrukci
echo $vystup[0][0];

používání Die() pro výpis textu mi přijde dosti nešikovné

a taky by mě zajímalo proč z toho udělá více stupňové pole
protože můžeš mít obecně víc podřetězců (částí ohraničených závorkami v regulárním výrazu) a každý takový podřetězec se může nacházet vícekrát v prohledávaném řetězci

měl by vypsat Ve špiččce (min) ale místo toho vypisuje až Z toho volných minut:(
pokud tam mohou být i odřádkování, je potřeba přidat modifikátor "s"
takže
preg_match_all("/<td>(.*)<\/td>/Us", $retezecSTabulkou, $vystup);

a výpis
foreach ($vystup[1] as $v) {
  echo $v."<br>";
}
dajusa
Profil
nightfish
diky moc to je presne to co potrebuju...jde o to ze klasickym vystupem je uz pdf s urcitymi daty...proto pred vlastni generovani do pdf davam
die($vystup[0][0]);
, potrebuju se jen ujistit ze pole obsahuje to co ma nic jineho
dajusa
Profil
jeste me napada jeden dotaz k tomuto tematu...moc se v regulernich vyrazech nevyznam a proto se ptam jak nubik...jde udelat nejak i to ze to vybere to co ted to znamena jednu bunku s tabulky ale zaroven to do pole ulozi bez tagu <td></td>?
nightfish
Profil
jde udelat nejak i to ze to vybere to co ted to znamena jednu bunku s tabulky ale zaroven to do pole ulozi bez tagu <td></td>?
přesně to to dělá, podívej se na $vystup[1][0], $vystup[1][1], $vystup[1][2], ...
dajusa
Profil
nightfish
no kdyz si to vypisu na stranku tak to vypise bez tech tagu, ale kdyz si dam zobrazit zdrojovy kod tak je to ulozene i s tagy <td></td>
nightfish
Profil
dajusa
tento kód mi to vypisuje bez <td> a </td>... jak jsem řekl - první index toho pole musí být "1" a ne "0"
<?php
$pokus = "<table border = on><tr><td><font size = 2>Síť</font></td><td><font size = 2>
Ve špiččce<br/>(min)</font></td><td><font size = 2>Mimo špičku</br> (min)</font>
</td><td><font size = 2>Z toho volných<br/> minut</font></td><td><font size = 2>Cena v 
Kč<br/>(bez DPH)</font></td></tr></table>";
preg_match_all("/<td>(.*)<\/td>/Us", $pokus, $vystup);
echo "<pre>";
print_r($vystup[1]);
echo "</pre>";
?>
dajusa
Profil
nightfish
aha tak v tom byla chyba...a proc nemuze byt ten index 0? je to nubicka otazka ale zajimalo by me to proc to zacina az od jednicky byt tak jak to ma...
nightfish
Profil
a proc nemuze byt ten index 0? je to nubicka otazka ale zajimalo by me to proc to zacina az od jednicky byt tak jak to ma...
ono je to v celku logické... když uděláš preg_match se dvěma podřetězci, např. preg_match("/(.*)defgh(.*)/", "abcdefghijkl", $regs), tak pole $regs bude obsahovat:
index 0 - celý řetězec, který odpovídá "zpárované části" regulárního výrazu (v našem případě "abcdefghijkl")
index 1 - bude obsahovat řetězec, který odpovídá prvnímu uzávorkovanému výrazu (v našem případě "abc")
index 2 - bude obsahovat řetězec, který odpovídá druhému uzávorkovanému výrazu (v našem případě "ijkl")
...

preg_match_all se liší jen tím, že vrací více výsledků (preg_match jen jeden)
pro uložení výsledků do pole je nutný další rozměr a výchozí nastavení preg_match_all je takové, že ukládá do
$vystup[0] - všechny celé řetězce, které odpovídají "zpárované části" RV
$vystup[1] - všechny řetězce, odpovídající první závorce...
a v každém takovémto poli jsou postupně od 0 indexovány jednotlivé nalezené řetězce
dajusa
Profil
diky moc za vysvetleni;)

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:

0