Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Generátor básní v PHP

PHP Ostatní Generátor básní v PHP

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Jsou to mé začátky v OOP, není to má výmluva, spíš nedostatek zkušeností. Tak když tam najdete nějaké chyby, napiště prosím do komentářů správné řešení. Díky

<?php
session_start();
header('Content-type: text/html; charset=utf-8');

/*
Velmi jednoduchý generátor básniček. Rozšíření je možné podle vašich potřeb.
Je to můj první větší script v OOP, tak to prosím berte velmi s rezervou.
*/

class Basen
{

public $obsah = ""; // záznam obsahu básně

private $pocet_slok = 1; // počet slok básně

private $vety = array("prid rod pod slov","pod prid rod slov","pod rod slov","rod priv pod slov");  // styl vět

private $styl = array("112211","221133","121233","332211","1122","1313","2332","11221122");  // styl básně

private $slova = array(
        "rod1" => array("muž","syn","dědeček","starosta","alkoholik","policista","saniták","svářeč","programátor","řezník","hrubián","hlídač krav","veterán"),
        "rod2" => array("sestra","matka","dcera","jeptiška","dojička","zpěvačka","básnířka","malířka","kurva","řidička","lazebnice","krakatice","večernice","polednice"),
        "rod3" => array("dítě","prase","struhadlo","švihadlo","strašidlo","mýdlo","jídlo","víno","leštidlo","lepidlo","sedadlo","lehátko","ořezávátko","na koberce klepadlo"),
        "pod1" => array("kredenc","počítač","stůl","parní válec","soustruh","olejový hever","boiler","traktor","klakson","katamarán","hoboj","router"),
        "pod2" => array("postel","kabelku","žehličku","ředkvičku","lampičku","tlamičku","lahvičku","stoličku","překližku","vydličku","hoblovku","vrtačku"),
        "pod3" => array("pivo","auto","letadlo","pyžamo","zrdcadlo","lepidlo","hovado","lákadlo","hekadlo","tričko","počítadlo","švihadlo"),
        "prid1" => array("velký","barevný","pevný","silný","jasný","přesný","krásný","starý","unavený","naštvaný","kouzelný","prolhaný","proradný","záhadný"),
        "prid2" => array("tlustá","šílená","ožralá","krásná","štíhlá","vláčná","drahá","levná","mladá","pihovatá","proradná","osamělou","odohodlanou","vyplašená"),
        "prid3" => array("skvělé","drahé","malé","silné","výkonné","bouřlivé","strnulé","rozbité","přiskříplé","zapomenuté","vážné","odhodlané","unavené","uplacené"),
        "slov1" => array("rozladil","hladil","radil","rozbil","zastřelil","zabalil","zapálil","polil","rozdrobil","opravil","opálil","chytil","odpálil","opustil","obrátil"),
        "slov2" => array("rozbila","štípala","vábila","hrozila","žárlila","shodila","zkrátila","mlátila","vypnula","předělala","přeřezala","osolila","omlátila","nabarvila"),
        "slov3" => array("letělo","hledělo","stávalo","načalo","bolelo","křupalo","chápalo","tápalo","skákalo","přestalo","řvalo","žvatlalo","zuřilo","schovalo","klepalo"),
        "priv1" => array("své","vlastní","kamarádův","otcův","drahý"),
        "priv2" => array("svou","cizí","novou","papírovou","zlevněnou"),
        "priv3" => array("své","jiné","zahraniční","levné","rozbité"),
); // pole slov

// upraví větu, první písmeno bude velké
private function uprav_vetu($s, $e ='utf-8')
{
        if (function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty($s)) {
                $s = mb_strtolower($s, $e);
                $u = mb_strtoupper($s, $e);
                preg_match('/(.)/us', $u, $m);
                $s = $m[1] . mb_substr($s, 1, mb_strlen($s, $e), $e);
        }
        else
        {
                $s = ucfirst($s);
        }
        return $s;
}

// vytvoří větu, vybere styl a doplní slova
private function vrat_vetu($x,$veta)
{
        $veta = preg_replace("/(prid)/i",($this->slova["prid$x"][array_rand($this->slova["prid$x"])]),$veta);
        $veta = preg_replace("/(rod)/i",($this->slova["rod$x"][array_rand($this->slova["rod$x"])]),$veta);
        $veta = preg_replace("/(pod)/i",($this->slova["pod$x"][array_rand($this->slova["pod$x"])]),$veta);
        $veta = preg_replace("/(slov)/i",($this->slova["slov$x"][array_rand($this->slova["slov$x"])]),$veta);
        $veta = preg_replace("/(priv)/i",($this->slova["priv$x"][array_rand($this->slova["priv$x"])]),$veta);
        return $this->uprav_vetu($veta).".";
}

// vytvoří tituloek básně
private function titulek()
{
        return "<h1>".($this->vrat_vetu(rand(1,3),"prid rod"))."</h1>\n\n";
}

// vytvoří obsah básně, vegeneruje věty a pošle je ke zpracování do vrat_vetu
private function vytvor_obsah()
{
        $obsah = "";
        for($b=0;$b<$this->pocet_slok;$b++)
        {
                $obsah .= "<p>";
                $x = rand(0,7);
                for($a=0;$a<(strlen($this->styl[$x]));$a++)
                {
                        $veta = $this->vety[array_rand($this->vety)];
                        $obsah .= $this->vrat_vetu($this->styl[$x][$a],$veta)."<br />\n";
                }
                $obsah .= "</p>\n";
        }
        return $obsah;
}

public function __construct($n)
{
        if($n < 1) $n = rand(2,5);
        $this->pocet_slok = $n;
}

public function __toString()
{
        $this->obsah .= $this->titulek();
        $this->obsah .= $this->vytvor_obsah();
        return $this->obsah;
}

}


// použití třídy Basen
// 0 = použije se náhodné číslo mezi 1 - 5, jinak se vrtátí tolik slok kolik budete potřebovat

$basen = new Basen(20);
echo $basen;

?>

Galerie

Program byl vytvořen v roce 2013.

 

Stáhnout

Staženo 234x (39.07 kB)
Aplikace je včetně zdrojových kódů v jazyce php

 

 

Program pro vás napsal David Hynek
Avatar
Jak se ti líbí článek?
1 hlasů
já jsem redaktor?
Miniatura
Všechny články v sekci
Ostatní tutoriály v PHP
Miniatura
Následující článek
Šablonovací systém PHP_JUI - Úvod
Aktivity (1)

 

 

Komentáře
Zobrazit starší komentáře (4)

Avatar
Michal Ježek
Redaktor
Avatar
Michal Ježek:26. května 11:54

Nefungují háčky a čárky, mění se na otazníky.

 
Odpovědět 26. května 11:54
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Ježek
David Čápka:26. května 12:09

Ale to přeci není tím skriptem :) Musíš ho vložit do HTML stránky, kde je nastavené UTF-8 kódování, to jsou úplné základy, viz zdejší kurzy.

Odpovědět  +1 26. května 12:09
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Michal Ježek
Redaktor
Avatar
Michal Ježek:26. května 15:29

No to mě napadlo... :-D
Ale přišlo mi to divné u hotového scriptu...

 
Odpovědět 26. května 15:29
Avatar
mkub
Redaktor
Avatar
Odpovídá na Michal Ježek
mkub:26. května 18:19

ten problem mas v kodovani toho suboru...
nastav si IDE, v ktorom to pises na utf-8, nasledne si nastav aj ten script na utf-8 a vyvaruj sa Windowsovemu notepadu - ten uklada iba vo Windows kodovani (napr. pre strednu Europu: cp-1250), co je uplne ine kodovanie, nez utf-8

 
Odpovědět 26. května 18:19
Avatar
Michal Ježek
Redaktor
Avatar
Odpovídá na mkub
Michal Ježek:26. května 19:18

Používám Notepad++

 
Odpovědět 26. května 19:18
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na Michal Ježek
David Hynek:27. května 11:43

Uf, to je už let.

Michale, když budeš psát program třebas v Notepadu, tak musíš soubor ukládat v nějakém kódování. Používám UTF8, totéž doporučuji tobě. Tak jak ten program je, vygeneruje část HTML, ale jen tu, která by měla být vložená mezi tagy Body. Tedy hlavičku stránky v HTML musíš napsat sám a také tam dát kodování znakové sady. Tedy opět UTF8.

Stránka by pak vypadala asi takto. Musíš ji samozřejmě uložit jako soubor PHP:

<?php
session_start();
header('Content-type: text/html; charset=utf-8');

/*
Velmi jednoduchý generátor básniček. Rozšíření je možné podle vašich potřeb.
Je to můj první větší script v OOP, tak to prosím berte velmi s rezervou.
*/

class Basen
{

public $obsah = ""; // záznam obsahu básně

private $pocet_slok = 1; // počet slok básně

private $vety = array("prid rod pod slov","pod prid rod slov","pod rod slov","rod priv pod slov");  // styl vět

private $styl = array("112211","221133","121233","332211","1122","1313","2332","11221122");  // styl básně

private $slova = array(
        "rod1" => array("muž","syn","dědeček","starosta","alkoholik","policista","saniták","svářeč","programátor","řezník","hrubián","hlídač krav","veterán"),
        "rod2" => array("sestra","matka","dcera","jeptiška","dojička","zpěvačka","básnířka","malířka","kurva","řidička","lazebnice","krakatice","večernice","polednice"),
        "rod3" => array("dítě","prase","struhadlo","švihadlo","strašidlo","mýdlo","jídlo","víno","leštidlo","lepidlo","sedadlo","lehátko","ořezávátko","na koberce klepadlo"),
        "pod1" => array("kredenc","počítač","stůl","parní válec","soustruh","olejový hever","boiler","traktor","klakson","katamarán","hoboj","router"),
        "pod2" => array("postel","kabelku","žehličku","ředkvičku","lampičku","tlamičku","lahvičku","stoličku","překližku","vydličku","hoblovku","vrtačku"),
        "pod3" => array("pivo","auto","letadlo","pyžamo","zrdcadlo","lepidlo","hovado","lákadlo","hekadlo","tričko","počítadlo","švihadlo"),
        "prid1" => array("velký","barevný","pevný","silný","jasný","přesný","krásný","starý","unavený","naštvaný","kouzelný","prolhaný","proradný","záhadný"),
        "prid2" => array("tlustá","šílená","ožralá","krásná","štíhlá","vláčná","drahá","levná","mladá","pihovatá","proradná","osamělou","odohodlanou","vyplašená"),
        "prid3" => array("skvělé","drahé","malé","silné","výkonné","bouřlivé","strnulé","rozbité","přiskříplé","zapomenuté","vážné","odhodlané","unavené","uplacené"),
        "slov1" => array("rozladil","hladil","radil","rozbil","zastřelil","zabalil","zapálil","polil","rozdrobil","opravil","opálil","chytil","odpálil","opustil","obrátil"),
        "slov2" => array("rozbila","štípala","vábila","hrozila","žárlila","shodila","zkrátila","mlátila","vypnula","předělala","přeřezala","osolila","omlátila","nabarvila"),
        "slov3" => array("letělo","hledělo","stávalo","načalo","bolelo","křupalo","chápalo","tápalo","skákalo","přestalo","řvalo","žvatlalo","zuřilo","schovalo","klepalo"),
        "priv1" => array("své","vlastní","kamarádův","otcův","drahý"),
        "priv2" => array("svou","cizí","novou","papírovou","zlevněnou"),
        "priv3" => array("své","jiné","zahraniční","levné","rozbité"),
); // pole slov

// upraví větu, první písmeno bude velké
private function uprav_vetu($s, $e ='utf-8')
{
        if (function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty($s)) {
                $s = mb_strtolower($s, $e);
                $u = mb_strtoupper($s, $e);
                preg_match('/(.)/us', $u, $m);
                $s = $m[1] . mb_substr($s, 1, mb_strlen($s, $e), $e);
        }
        else
        {
                $s = ucfirst($s);
        }
        return $s;
}

// vytvoří větu, vybere styl a doplní slova
private function vrat_vetu($x,$veta)
{
        $veta = preg_replace("/(prid)/i",($this->slova["prid$x"][array_rand($this->slova["prid$x"])]),$veta);
        $veta = preg_replace("/(rod)/i",($this->slova["rod$x"][array_rand($this->slova["rod$x"])]),$veta);
        $veta = preg_replace("/(pod)/i",($this->slova["pod$x"][array_rand($this->slova["pod$x"])]),$veta);
        $veta = preg_replace("/(slov)/i",($this->slova["slov$x"][array_rand($this->slova["slov$x"])]),$veta);
        $veta = preg_replace("/(priv)/i",($this->slova["priv$x"][array_rand($this->slova["priv$x"])]),$veta);
        return $this->uprav_vetu($veta).".";
}

// vytvoří tituloek básně
private function titulek()
{
        return "<h1>".($this->vrat_vetu(rand(1,3),"prid rod"))."</h1>\n\n";
}

// vytvoří obsah básně, vegeneruje věty a pošle je ke zpracování do vrat_vetu
private function vytvor_obsah()
{
        $obsah = "";
        for($b=0;$b<$this->pocet_slok;$b++)
        {
                $obsah .= "<p>";
                $x = rand(0,7);
                for($a=0;$a<(strlen($this->styl[$x]));$a++)
                {
                        $veta = $this->vety[array_rand($this->vety)];
                        $obsah .= $this->vrat_vetu($this->styl[$x][$a],$veta)."<br />\n";
                }
                $obsah .= "</p>\n";
        }
        return $obsah;
}

public function __construct($n)
{
        if($n < 1) $n = rand(2,5);
        $this->pocet_slok = $n;
}

public function __toString()
{
        $this->obsah .= $this->titulek();
        $this->obsah .= $this->vytvor_obsah();
        return $this->obsah;
}

}


// použití třídy Basen
// 0 = použije se náhodné číslo mezi 1 - 5, jinak se vrtátí tolik slok kolik budete potřebovat

?>
<!DOCTYPE html>
<html lang="cs-cz">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Báseň</title>
  </head>
  <body>
<?php
   $basen = new Basen(5);
   echo $basen;
?>
  </body>
</html>

Nepočítej s nějakým zázrakem, který bys mohl recitovat nějaké holce, je to jen zkouška funkčnosti.

Ať se daří.

Odpovědět 27. května 11:43
Čím víc vím, tím víc věcí nevím.
Avatar
Michal Ježek
Redaktor
Avatar
Odpovídá na David Hynek
Michal Ježek:27. května 11:49

Většinou to funguje i když tam vůbec kódovaní nenapíšu, ale když tam je tak by mělo být správně no...
Nicméně vím, že ta báseň není žádný zázrak, PHP nemá umělou inteligenci... :-D

 
Odpovědět 27. května 11:49
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na Michal Ježek
David Hynek:27. května 11:55

Na to se nesmíš spoléhat. Protože prohlížeč se zeptá stránky, v jakém kódování ji má přečíst. A když tam nic není, použije standardní nastavení. A to bude vždy jako na potvoru jiné než v kterém je stránka uložena. Pak stačí mít v Notepadu nastaveno jedno kodování a když do něj vložíš kód ze stránek v jiném kodování a uložíš, tak ti to diakritiku úplně rozhodí. Naschvál se koukni co máš v tom Notepadu nastaveno.

Odpovědět  +1 27. května 11:55
Čím víc vím, tím víc věcí nevím.
Avatar
Michal Ježek
Redaktor
Avatar
Michal Ježek:27. května 12:42

Je tam kódování "UTF-8 (bez BOM)"

 
Odpovědět 27. května 12:42
Avatar
mkub
Redaktor
Avatar
Odpovídá na Michal Ježek
mkub:27. května 22:24

najjistejsie bude, ked budes uvadzat v hlavicke kodovanie, v ktorom je dany dokument ulozeny a ho dodrzovat vo vsetkych prisluchajucich suborov a zaroven ak aplikacia pouziva databazu, tak aj uviest pri definovani tabuliek a databazy, v akom kodovani su ulozene udaje a navyse je to aj odporucany postup (sice trosku narastie velkost zdrojoveho kody, ale tych par bajtov navyse nehra ziadnu rolu, skor naopak, pomoze browseru vybrat vhodne kodovanie)

 
Odpovědět  +1 27. května 22:24
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 14. Zobrazit vše