Autor Zpráva
andynewcastleth
Profil
Chci vytvořit v HTML tabulku, která by vypadala takto:



Problém je, že já data dostávám jako string ve tvaru:

Něco | Začátek: -| Konec: 12:00Něco | Začátek: 8:00 | Konec: -Něco | Začátek: 7:00 | Konec: 22:00........

Buňky jsou odděleny pomocí znaku |.

Hlavní problém pro mě je identifikovat konec řádku.

Konec řádku může být buď:

Něco | Začátek: -| Konec: 12:00(tady)Něco | Začá....... (dvě nuly)
Něco | Začátek: -| Konec: 12:30(tady)Něco | Začá....... (jedna nula)
Něco | Začátek: -| Konec: -(tady)Něco | Začá........ (pomlčka)
Něco | Začátek: -| Konec: -(tady)Něco-něco | Začá........ (Slovo "něco" rovněž může obsahovat pomlčku)
NoxOne
Profil
dej sem vzorek dat tak jak je dostaneš cca 3 řádky. Někdo používá na konci řádky CRLF
andynewcastleth
Profil
Například tady kompletní data pro jednu tabulku:

Něco | Start: - | Konec: 17:00Něco něco | Start: 12:00 | Konec: 21:00Něco | Start: 10:00 | Konec: -Něco-něco | Start: - | Konec: 08:00Něco | Start: 02:00 | Konec: 12:00Něco-něco | Start: 08:00 | Konec: 14:00Něco | Start: 07:00 | Konec: 18:30Něco-něco | Start: 03:00 | Konec: 18:00Něco | Start: 06:00 | Konec: -Něco-něco | Start: 13:00 | Konec: 23:00Něco něco | Start: - | Konec: -Něco | Start: 09:00 | Konec: 13:00Něco | Start: - | Konec: -Něco | Start: 13:00 | Konec: 23:30
Radek9
Profil
andynewcastleth:
Možná by to mohlo fungovat takhle:
<?php
$data = '...';
$lines = preg_split('/(?<= \| Konec\: -)|(?<= \| Konec\: \d{2}\:\d{2})/', $data);
andynewcastleth
Profil
Radek9:

To se nezdá být funkční:


Array (
[0] => Něco
[1] => |
[2] => Start:
[3] => -
[4] => |
[5] => Konec:
[6] => 17:00Něco
[7] => něco
[8] => |
[9] => Start:
[10] => 12:00
[11] => |
[12] => Konec:
[13] => 21:00Něco
[14] => |
[15] => Start:
[16] => 10:00
[17] => |
[18] => Konec:
[19] => -
[20] .....
)
Radek9
Profil
andynewcastleth:
Huh, zvláštní. Jaká verze PHP? Kódování? Mně to na PHP 5 i 7 normálně frčí a vyplivne to tohle:
Array
(
    [0] => Něco | Start: - | Konec: 17:00
    [1] => Něco něco | Start: 12:00 | Konec: 21:00
    [2] => Něco | Start: 10:00 | Konec: -
    [3] => Něco-něco | Start: - | Konec: 08:00
    [4] => Něco | Start: 02:00 | Konec: 12:00
    [5] => Něco-něco | Start: 08:00 | Konec: 14:00
    [6] => Něco | Start: 07:00 | Konec: 18:30
    [7] => Něco-něco | Start: 03:00 | Konec: 18:00
    [8] => Něco | Start: 06:00 | Konec: -
    [9] => Něco-něco | Start: 13:00 | Konec: 23:00
    [10] => Něco něco | Start: - | Konec: -
    [11] => Něco | Start: 09:00 | Konec: 13:00
    [12] => Něco | Start: - | Konec: -
    [13] => Něco | Start: 13:00 | Konec: 23:30
    [14] => 
)

Kdyžtak sem ještě pošli tvůj kompletní kód.
andynewcastleth
Profil
Radek9:

Aha, já jsem to jen včera rychle zkoušel v jednom z těch online PHP editorů. Ale dnes na mém localhostu/hostingu to již funguje OK.

Zdá se, že tvé řešení skutečně odchytí všechny možné varianty a vše, na co mohu narazit.

Děkuji mockrát za pomoc!
NoxOne
Profil
Radek9:
andynewcastleth:
Možná by to mohlo fungovat takhle:
<?php
$data = '...';
$lines = preg_split('/(?<= \| Konec\: -)|(?<= \| Konec\: \d{2}\:\d{2})/', $data);

Byl jsi rychlejší. Měj bych méně sedět u PC a dříve vstávat.

PS: občas je lepší poslat data tak jak je dostaneš než se dlouze rozepisovat. :)

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