| Autor | Správa |
Blackshadow
 Užívateľ
 Založený: 09.09.2007 Príspevky: 3156 Bydlisko: Nové Zámky
 | Zaslal: Po 30.08.10 23:57 |   |
| camo napísal: | Myslím, že na to existuje nejaká funkcia ,ale netuším ktorá... |
Ty citas tie odkazy vobec, ktore sem davas ?
http://georgik.sinusgear.com/tag/php/
| kód: | Veď je to tak jednoduché zístiť, koľko vaša aplikácia spotrebuje pamäte:
echo memory_get_usage() . "\n"; |
atd..
Dalej si vies zmerat cas...
Zmerias cas na zaciatku dokumentu, potom tvojou triedou daj spracovat nieco v cykle, napriklad 100 krat za sebou a potom znova odmeraj cas a odcitaj ich..
Uvidis vysledok - rozdiel dvoch casov..
Potom nieco zmen v tej triede, napriklad file() a fopen() a zas to spusti.. Uvidis rozdiel.. |
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď | |
   |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1185 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Ut 31.08.10 16:08 |   |
No tak som to zlátal. Je to o niečo lepšie?
| kód: |
<?php
class catalog
{
var $Gsource;
var $Glevel;
public function loadSource($param)
{
$this->Gsource=file($param);
}
public function renderMenu()
{
$this->Glevel=0;
foreach($this->Gsource as $item)
{
$item=trim($item);
$this->renderItem($item);
}
$item='**END**';
$this->renderItem($item);
}
private function renderItem($item)
{
$lev=strspn($item,'-');
if($lev > $this->Glevel)
{
echo "\n<ul>\n\t<li>$item";
$this->Glevel=$lev;
}
else if($lev == $this->Glevel)
{
echo "</li>\n\t<li>$item"; // level netreba nastovat lebo ==
}
else if($lev < $this->Glevel)
{
$levCk=$lev; // $levCk - pre potreby tohoto cyklu
do { // ukoncuje otvorene urovne
echo "</li>\n</ul>\n</li>";
$levCk++;
}
while($levCk < $this->Glevel);
if($item!='**END**') echo "\n\t<li>$item";
$this->Glevel=$lev;
}
}
}
?> |
|
| |
    |
 |
stenley
 Moderátor
 Založený: 27.07.2007 Príspevky: 3715 Bydlisko: Bratislava Vek: 26
 | Zaslal: Ut 31.08.10 17:04 |   |
no vidis, ze sa to da, oproti prvemu pokusu je to ovela prehladnejsie a s mensim objemom kodu, ale stale je tam co doladovat... inak, renderItem() ti zle uzatvara urovne, ak sa skoci napr. z tretej na prvu... |
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB | |
    |
 |
Blackshadow
 Užívateľ
 Založený: 09.09.2007 Príspevky: 3156 Bydlisko: Nové Zámky
 | Zaslal: Ut 31.08.10 17:14 |   |
No a hlavne tam pomlcky zostavaju  |
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď | |
   |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 927
 | Zaslal: Ut 31.08.10 18:14 |   |
|
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1185 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Ut 31.08.10 18:49 |   |
Stenley:
S tým uzatváraním úrovní som sa teda dobre potrápil. Ale u mňa, keď som si dal na <ul> border tak bolo všetko OK. Tak som trochu zmetený...
A čo by sa tam malo ešte doladiť?
Coldak:
Chcel som, aby ten kód nejako vyzeral aj v prehliadačoch, a aj keď sa to nezdá, môže to byť ešte horšie...
Blackshadow:
Tentokrát to bol úmysel, lebo sa to tak lepšie číta a kontroluje... |
| |
    |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 927
 | Zaslal: Ut 31.08.10 20:14 |   |
| camo napísal: | Stenley:
S tým uzatváraním úrovní som sa teda dobre potrápil. Ale u mňa, keď som si dal na <ul> border tak bolo všetko OK. Tak som trochu zmetený...
A čo by sa tam malo ešte doladiť? |
toto je vysledny html kod. si si isty ze je kosher ?
| kód: | <ul>
<li>-TV, audio, video
<ul>
<li>--LCD televízory
<ul>
<li>---JVC</li>
<li>---LG</li>
</ul>
</li>
<li>--LED televízory</li>
<li>--Prehrávače
<ul>
<li>---Bluray prehrávače</li>
<li>---DVD prehrávače</li>
</ul>
</li></li>
</ul>
</li>
<li>-Veľké spotrebiče
<ul>
<li>--Práčky</li>
<li>--Sušičky</li>
<li>--Chladničky
<ul>
<li>---voľne stojace</li>
<li>---vstavané</li>
</ul>
</li>
<li>--Sporáky</li>
</ul>
</li></li>
</ul>
</li> |
| camo napísal: | Coldak:
Chcel som, aby ten kód nejako vyzeral aj v prehliadačoch, a aj keď sa to nezdá, môže to byť ešte horšie... |
chcel si odstranit znak "\n" z nacitaneho obsahu?
precital si si poriadne syntax prikazu "file" ?
http://sk.php.net/manual/en/function.file.php
naco asi tak sluzi flag "FILE_IGNORE_NEW_LINES"? manual tvrdi : "Do not add newline at the end of each array element" |
| |
  |
 |
stenley
 Moderátor
 Založený: 27.07.2007 Príspevky: 3715 Bydlisko: Bratislava Vek: 26
 | Zaslal: Ut 31.08.10 21:55 |   |
| camo napísal: | Stenley:
S tým uzatváraním úrovní som sa teda dobre potrápil. Ale u mňa, keď som si dal na <ul> border tak bolo všetko OK. Tak som trochu zmetený...
A čo by sa tam malo ešte doladiť? |
Zjednodusit kod a odstranit problemy so spravnym uzatvaranim urovni by si velmi jednoducho mohol vyriesit pomocou rekurzivnej metody... |
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB | |
    |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1185 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Ut 31.08.10 22:33 |   |
stenley:
No jó no rekurzia....
... je keď fcia volá sama seba... chcel som to tak urobiť, ale nevedel som ako.... Ak by si fakt nemal čo robiť tak a bol by si tak šľachetný a udatný , tak by som to rád videl, lebo si to neviem predstaviť. Pošlem 1kg čokolády podľa vlastného výberu, lebo by som sa to potreboval naučiť...
coldak:
Ty si sa zrejme ani nenarodil, teba rodičia kúpili v obchode s počítačmi nie???
Mám doma jeden taký script na výpis adresára, kde mám rekurziu, ale na to menu som to nevedel namontovať:
| kód: | <ul>
<?php
$what=".";
adresar($what);
function adresar($what)
{
$blacklistADR=array('..','.');
$open=opendir($what."/");
while($item=readdir($open))
{
if(is_dir($item) and in_array($item,$blacklistADR)) continue;
if(is_dir($item))
{
echo "<li><span class=\"red\">$item /adresar/</span><ul>\n";
echo adresar($what."/".$item);
}
else echo "<li><a href=\"".$what."/".$item."\">$item</a></li>\n";
}
echo "</ul>";
}
?>
</ul> |
|
| |
    |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 927
 | Zaslal: Ut 31.08.10 22:50 |   |
camo: nemohli ma kupit, lebo ja som na nezaplatenie, ale obcas som na zaplakanie
aby si nepovedal, ze som nebodaj z utulku(cize pes), tak som si dal trochu namahy a par hodin som studoval PHP aby som ti mohol poslat nejaky example.
| kód: | <?php
interface ICatalog {
public function load($conf);
public function render();
}
class TCatalog implements ICatalog {
private $data=array();
private $stack = array();
static public function cast(TCatalog $object) {
return $object;
}
private function getLevel($txt) {
return strspn($txt,"-");
}
private function addNode($sublevel,$line) {
$subarr = array($line);
$this->stack[$sublevel]= &$subarr;
array_push($this->data,&$subarr);
}
private function addSubNode($sublevel,$line) {
$subarr = array($line);
$this->stack[$sublevel]= &$subarr;
array_push($this->stack[$sublevel-1],&$subarr);
}
public function load($conf){
$level=1;
$handle = fopen($conf, "r");
while (!feof($handle)) {
$line = &fgets($handle);
$sublevel = $this->getLevel($line);
$line = trim(ltrim($line,"-"));
if ($level==$sublevel) {
$this->addNode($sublevel,$line);
}
if ($level<$sublevel) {
$this->addSubNode($sublevel,$line);
}
}
fclose($handle);
}
protected function prn($arr,$level) {
$cnt = &count($arr);
$level++;
echo str_repeat(" ", $level)."<UL>\n";
for ($i=1;$i<$cnt;$i++) {
echo str_repeat(" ", $level)."<LI>".$arr[$i][0]."</LI>\n";
if (count(&$arr[$i])>1) {
$this->prn(&$arr[$i],$level);
}
}
echo str_repeat(" ", $level)."</UL>\n";
}
public function render(){
$this->prn($this->data,0);
}
}
$catalog = new TCatalog();
$catalog->load("menu.txt");
echo "<html>\n<body>\n";
$catalog->render();
echo "</body>\n</html>\n";
echo memory_get_peak_usage();
?> |
kedze v PHP mam asi dvojdnove skusenosti tak budem rad ak mi manici v PHP napisu co by sa dalo urobit lepsie. dik |
| |
  |
 |
stenley
 Moderátor
 Založený: 27.07.2007 Príspevky: 3715 Bydlisko: Bratislava Vek: 26
 |
| camo napísal: | stenley:
No jó no rekurzia....
... je keď fcia volá sama seba... chcel som to tak urobiť, ale nevedel som ako.... Ak by si fakt nemal čo robiť tak a bol by si tak šľachetný a udatný , tak by som to rád videl, lebo si to neviem predstaviť. Pošlem 1kg čokolády podľa vlastného výberu, lebo by som sa to potreboval naučiť... |
tu mas rekurzivnu metodu, co som napisal pred par dnami, ktora ti korektne vygeneruje cely zoznam.
Mensi popis: $content vzdy obsahuje pole poloziek jednej urovne v danej vetve (napr. TV, audio, video a Veľké spotrebiče). V cykle sa postupne cez ne prechadza a kontroluje, ci dana polozka obsahuje dalsi vnoreny zoznam. Ak ano (to je ta podmienka if), metoda zavola samu seba s tym, ze ako svoj parameter uvedie pole poloziek vnoreneho zoznamu najvyssej urovne. Jednoduche, nie?
| kód: | private function _genMenu($content)
{
if(empty($content)) {
return;
}
echo '<ul>';
foreach($content as $key => $value) {
$level = $this->_getLevel($key);
echo '<li>'.substr(trim($value), $level);
if($this->_hasChild($key, $level)) {
$this->_genMenu($this->_getChildren($key, $level));
}
echo '</li>';
}
echo '</ul>';
} |
PS: cokoladu mi posielat nemusis
>coldak: tvoj kod u mna vygeneruje len druhu polovicu stromu a hlasi zopar chyb s referenciami. |
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB | |
    |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1185 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: St 01.09.10 10:05 |   |
Díky moc, ten zvyšok okolo toho skúsim domyslieť sám, to hádam zvládnem....
PS: Nieje tá coldakova metóda s použitím fopen problematická?! Myslím na súperenie dvoch stránok o prístup k súboru. Tak som to nejako čítal v knihe, ale v manuály som nič také nevidel.... |
Naposledy upravil camo dňa St 01.09.10 10:21, celkom upravené 1 krát. | |
    |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 927
 | Zaslal: St 01.09.10 10:06 |   |
stenley sorac, este na poslednu chvilku som robil nejake pokusy a vymazal som inicializacny prvok pola takze spravne by malo byt | kód: | class TCatalog implements ICatalog {
private $data=array("root");
private $stack = array(); |
edit: ako nastavim php aby mi hlasilo aj chyby referencii ?
edit2: uz som si to nastavil, tie warnings su otom ze cez referenciu na objekt si ho modifikujem, ale to je zamer. |
| |
  |
 |
stenley
 Moderátor
 Založený: 27.07.2007 Príspevky: 3715 Bydlisko: Bratislava Vek: 26
 | Zaslal: St 01.09.10 10:59 |   |
>camo: zvysok je uz malina, najvacsi "problem" je prave to generovanie spravneho vnorenia zoznamov... kedze len citas zo suboru a nijak ho nemodifikujes, tak by nemal byt problem s pristupom k jeho obsahu...
>coldak: je to deprecated, takze by som to uz radsej nepouzival, aj ked sa to da zmenit v php.ini... |
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB | |
    |
 |
|
Nemôžete pridávať nové témy do tohto fóra. Nemôžete odpovedať na témy v tomto fóre. Nemôžete upravovať svoje príspevky v tomto fóre. Nemôžete mazať svoje príspevky v tomto fóre. Nemôžete hlasovať v tomto fóre.
|
|