Diskuze: <textarea> zoradenie slov

PHP PHP <textarea> zoradenie slov American English version English version

Avatar
himak
Člen
Avatar
himak:

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):

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

Nahoru Odpovědět  +1 5.11.2015 17:36
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na himak
Marek Z.:

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  +1 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):

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
Avatar
himak
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
himak:

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 Marek Z.
himak:

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:

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):

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
Avatar
Odpovídá na himak
Martin Konečný (pavelco1998):

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
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Tomáš123:

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):

... 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
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Tomáš123:

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):

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  +1 6.11.2015 18:25
Avatar
himak
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
himak:

@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:

@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:

@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:

@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.