Autor | Zpráva | ||
---|---|---|---|
Lochnan Profil |
Ahoj, mám v proměnné textově uloženy tyto data:
$str = ' $lang['wss_texts_cis_15'] = 'Nějaká událost'; $lang['wss_texts_cis_16'] = 'Nějaká = událost \' jiná'; '; a potřeboval bych z toho dostat vždycky klíč a hodnotu, pro další zpracování. Zkoušel jsem to spustit jako eval, ale nepovedlo se. Takže další způsob mě napadl preg_match_all ale nepovedlo se mi nikdy ošetřit, že v hodnotě pole může být taktéž znak =, nebo escapované uvozovky. Dá se toto nějak elegantně řešit, že bych ve výstupu měl něco (třeba) takovéhoto:? $output = array(0 => array('wss_texts_cis_15' => 'Nějaká událost'), 1=> array('wss_texts_cis_16' => 'Nějaká = událost \' jiná')); |
||
juriad Profil |
#2 · Zasláno: 11. 6. 2014, 19:47:30
Máš-li to v souboru a nikoli jen v proměnné, můžeš ten soubor prostě includnout a tím se ti naplní pole $lang.
|
||
Lochnan Profil |
#3 · Zasláno: 11. 6. 2014, 19:48:49
juriad:
Bohužel, tento obsah mi přijde jako string v POST proměnné. |
||
Fisir Profil |
Reaguji na Lochnana:
Tak hlavně je tam nějaký mišmaš v apostrofech. Ale rychle jsem sestavil parsovací funkci, je to bezpečnější než eval() :
function convertStringToArray($string){ $result = preg_match_all('/\$([a-zA-Z_\x7f-\xff]+)\[["\'](.+)["\']\]\s*=\s*["\'](.+)["\'];/u', $string, $matches, PREG_SET_ORDER); $return = array(); foreach($matches as $match){ $return[$match[1]][$match[2]] = $match[3]; } return $return; } $promenna = '$lang[\'hello\'] = "ahoj"; $variable["y \" fd y"] ="gangam stajl ";'; $result = convertStringToArray($promenna); var_dump($result) vrací:
array(2) { ["lang"]=> array(1) { ["hello"]=> string(4) "ahoj" } ["variable"]=> array(1) { ["y \"s p"]=> string(13) "gangam stajl " } } Místo mezer se chytnou jakékoli bílé znaky. |
||
Lochnan Profil |
#5 · Zasláno: 11. 6. 2014, 20:57:16
Fisir:
Díky moc, na reguláry jsem slabej :) Funguje tak jak má. |
||
Časová prodleva: 10 let
|
0