NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: <textarea> zoradenie slov

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
himak
Člen
Avatar
himak:5.11.2015 16:48

Ahojte,

uzivatel ma vlozit do elementu <textarea> zoznam textovych poloziek. Spravny format by mal byt

zaznam1
zaznam2
zaznam3
atd.

A ja to nasledne spracuje a vypisem do tabulky:

  1. zaznam1
  2. zaznam2
  3. zaznam3

atd.

Uzivatel vsak moze urobit chybu pri vkladani udajov to <textarea>, napr.

zaznam1
zaznam2 zaznam3

zaznam4
zaznam5

atd.

Snazil som sa vyfiltrovat mozne biele znaky, ale potom si iba spojim vsetky zaznamy do jedneho retazca a skoncil som.

Nejake napady ?

Vdaka

 
Odpovědět
5.11.2015 16:48
Avatar
Libor Šimo (libcosenior):5.11.2015 17:36

Mozno by ma uzivatel kazdy zaznam potvrdit klavesou enter a ty ju pouzijes ako oddelovac.

Nahoru Odpovědět
5.11.2015 17:36
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na himak
Uživatel sítě :5.11.2015 17:54

Hmm a jedná se o řetězce bez bílých znaků či to mohou být i 2 slova na jednom řádku?

V tom případě by se záznamy mohli oddělovat i středníkem.

zaznam1;zaznam2;a­pod..

Edit: Pokud tedy není problém změnit formát vstupních dat.

Editováno 5.11.2015 17:55
Nahoru Odpovědět
5.11.2015 17:54
Chybami se člověk učí, běžte se učit jinam!
Avatar
Odpovídá na himak
Martin Konečný (pavelco1998):5.11.2015 18:18

asi to neni moc OK řešení, ale něco takovýho by asi mělo fungovat

$str = "
zaznam1
zaznam2 zaznam3

zaznam4
zaznam5
";

$str = str_replace(" ", "\n", $str);  // mezery změní na řádky
$arr = explode("\n", $str);
foreach ($arr as &$val) {
        if (empty($val)) {
                unset($val);
        }
}

echo "<pre>";
print_r($arr);
Nahoru Odpovědět
5.11.2015 18:18
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
himak
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
himak:5.11.2015 21:17

Ahoj, to urcite nie...ide o zoznam subjektov, ktory sa nasledne ma spracovat hromadne a automaticky...moze iste aj o tisicky zaznamov.

 
Nahoru Odpovědět
5.11.2015 21:17
Avatar
himak
Člen
Avatar
Odpovídá na Uživatel sítě
himak:5.11.2015 21:21

Zoznam zaznamov je distribuovany zvacsa v tom formate, co pisal, teda:

zaznam1
zaznam2
zaznam3
atd.

Nasledne je zoznam zoradeny podla abecedy a potom su jednotlive zaznamy vlizene do tabulky a vzika tak dokument A4 aj viacstranovy.

 
Nahoru Odpovědět
5.11.2015 21:21
Avatar
himak
Člen
Avatar
himak:5.11.2015 21:44

Ahoj, pouzil som tvoj kod, kt. mi celkom dava zmysel, avsak dostal som odpoved:

Array
(
[0] => aaa
[1] =>
[2] => bbb
[3] => ccc
[4] => ddd
)

Vstup bol:

"aaa

bbb
ccc ddd"

Editováno 5.11.2015 21:46
 
Nahoru Odpovědět
5.11.2015 21:44
Avatar
Odpovídá na himak
Martin Konečný (pavelco1998):5.11.2015 22:21

Jestli je to odpověď na mě, zkus do podmínky if (empty($val)) hodit if (empty(trim($va­l))).
V podstatě se nějak musíš zbavit prázdných záznamů, pokud chápu správně.

Ale asi na to celkově bude lepší řešení

Nahoru Odpovědět
5.11.2015 22:21
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na himak
Martin Konečný (pavelco1998):5.11.2015 22:25

Tak jsem to zkusil na localu a tohle šlo něco takovýho

$str = str_replace(" ", "\n", $str);  // mezery změní na řádky
$arr = explode("\n", $str);
foreach ($arr as $key => $val) {
                $val = trim($val);

        if (empty($val) || $val === "") {
                unset($arr[$key]);
        }
}

echo "<pre>";
print_r($arr);
Nahoru Odpovědět
5.11.2015 22:25
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Tomáš123:6.11.2015 16:11

Bez prvého riadku by bol skript odolnejší voči viaslovným pomenovaniam...

Nahoru Odpovědět
6.11.2015 16:11
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Odpovídá na Tomáš123
Martin Konečný (pavelco1998):6.11.2015 16:19

... ale zase by to nebylo odolný proti tomuto, cituji:

Uzivatel vsak moze urobit chybu pri vkladani udajov to <textarea>, napr.

zaznam1
zaznam2 zaznam3

zaznam4
zaznam5

atd.

Nahoru Odpovědět
6.11.2015 16:19
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Tomáš123:6.11.2015 17:50

Veď si to ošetril tou podmienkou. Prípadne, ak by to nefungovalo dobre, ide zisťovať, či sa val != iba "\n".

Čisto teoreticky by toto mohlo fungovať:

$arr = explode("\n", $str);
foreach ($arr as $key => $val) {
        $val = trim($val);
        if (empty($val) || $val == "\n") {
                unset($arr[$key]);
        }
}

echo "<pre>";
print_r($arr);
echo "</pre>";
Nahoru Odpovědět
6.11.2015 17:50
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Odpovídá na Tomáš123
Martin Konečný (pavelco1998):6.11.2015 18:25

otázkou je, jestli se

zaznam1 zaznam2

má uložit jako jeden nebo dva zánamy. Řešení nás obou může být správně i špatně.

Nahoru Odpovědět
6.11.2015 18:25
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
himak
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
himak:6.11.2015 18:47

@Martin Konecny(pavel­co1998)

Vlozil som to do kodu a vysledok bol, ze mi [3] prvok v poli bol zrusny, co malo za nasledok:

Array
(
[0] => zaznam1
[1] => zaznam2
[2] => zaznam3
[4] => zaznam4
[5] => zaznam5
)

Vystup u mna do tabulky so 4 stlpcami tak bol:

  1. zaznam1 2. zaznam2 3. zaznam3 4.
  2. zaznam4
 
Nahoru Odpovědět
6.11.2015 18:47
Avatar
himak
Člen
Avatar
himak:6.11.2015 18:48

@Tomas123 zaznam bude vzdy iba jednoslovny.

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
6.11.2015 18:48
Avatar
himak
Člen
Avatar
himak:6.11.2015 18:54

@Tomas123 pouzil som tvoj kod a vypis hodnoty pola je:

Array
(
[0] => zaznam1
[1] => zaznam2 zaznam3
[3] => zaznam4
[4] => zaznam5
)

Vystup do tabulky:

1. zaznam1 2. zaznam2 3. 4. zaznam4

Vstupne data boli rovnako napisane teda:

zaznam1
zaznam2 zaznam3

zaznam4
zaznam5

Nie som az tak dobry v PHP, pouzili ste funkcie ako trim, empty, unset, <pre>, kt. som este nepouzil...

Zatial ma napada, napisat pouzivatelovi, ze nech to tam vklada spravne, inak sa mu to zle vygeneruje...

 
Nahoru Odpovědět
6.11.2015 18:54
Avatar
himak
Člen
Avatar
himak:9.11.2015 9:32

@Tomas123 omylom som oznacil tvoju odpoved za riesenie tohto problemu.

 
Nahoru Odpovědět
9.11.2015 9:32
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 17 zpráv z 17.