Autor | Zpráva | ||
---|---|---|---|
Jack06 Profil |
#1 · Zasláno: 18. 7. 2011, 19:01:02 · Upravil/a: Jack06
Dobrý den, potřebuju rozdělit text do array pole a zajímalo by mě, jak to šikovně udělat. Text může být následovný:
Ahoj já jsem pepa [block] něco v bloku [/block] Jedu domů šalinou [block] test test [/block]. A potřebuji to do pole následovně: $pole[0] = 'Ahoj já jsem pepa'; $pole[1] = 'něco v bloku'; $pole[2] = 'Jedu domů šalinou'; $pole[3] = 'test test'; atd atd Moc děkuji za rady. |
||
Marek88 Profil |
#2 · Zasláno: 18. 7. 2011, 19:52:04
Rozdělit třeba pomocí preg_split s regulárem. Snad je to dobře...
$pole=preg_split("~\[/?block\]~", $text); |
||
lukasik Profil |
#3 · Zasláno: 18. 7. 2011, 20:17:33
tak mě napadá - nestačilo by explode?
|
||
Jack06 Profil |
#4 · Zasláno: 18. 7. 2011, 20:19:16
no trochu jsem to napsal tak, že to asi splitem nepujde.. Opravuju záznam:
Ahoj já jsem pepa [block id="1"]něco v bloku[/block] Jedu domů šalinou [block id="10"]test test[/block]. atd $pole[0][text] = 'Ahoj já jsem pepa'; $pole[0][id] = NULL; $pole[1][text] = 'něco v bloku'; $pole[1][id] = 1; $pole[2][text] = 'Jedu domů šalinou'; $pole[2][id] = NULL; $pole[3][text] = 'test test'; $pole[3][id] = 10; |
||
Majkl578 Profil |
#5 · Zasláno: 19. 7. 2011, 00:21:32
Vyřešeno mimo diskuzi, řešení (pokud by někoho zajímalo):
$s = 'Ahoj já jsem pepa [block param1="foo" param2="bar"]něco v bloku[/block] Jedu domů šalinou [block]test test[/block].'; $m = preg_split('~(\[block(?:.*)\](?:.+)\[/block\])~Uis', $s, -1, PREG_SPLIT_DELIM_CAPTURE); $m = array_map(function ($s) { if (preg_match('~\[block(?: (?<params>.+))?\](?<text>.+)\[/block\]~Uis', $s, $m)) { $params = array(); if (!empty($m['params'])) { if (preg_match_all('~(\S+)="(.+)"~U', $m['params'], $mp, PREG_PATTERN_ORDER)) { $params = array_combine($mp[1], $mp[2]); } } return array('text' => $m['text']) + $params; } else { return array('text' => $s); } }, $m); var_dump($m); |
||
Časová prodleva: 13 let
|
0