Autor | Zpráva | ||
---|---|---|---|
Ikki Profil |
Ahoj,
mám v databázi hodnotu kategorie1, kategorie2, kategorie3 , které potřebuji vyobrazit v Select2.
Vše funguje jak má i s testovacími daty, ale ve chvíli kdy to zkusím zpracovat přes PHP, narážím na nejspíš banalitu. V JS se předávají hodnoty v tomto formátu; var selectedValues = ["kategorie1", "kategorie2", "kategorie3"]; Jenže v případě, že to vypíšu napřímo, vznikne string ve tvaru "kategorie1, kategorie2, kategorie3"
Jak tenhle string přepsat a přidat do něj úvozovky tak, aby string splňoval tvar pro JS? Zkoušel jsem explode, regex, preg_replace, implode, ale asi chybně. implode('", "', array($detailData['category'])); výsledek implode se tváří jako; string(45) "kategorie1, kategorie2, kategorie3" Takže vlastně implode ani array jako kdyby nefungoval. Díky moc! |
||
Kajman Profil |
#2 · Zasláno: 14. 4. 2021, 18:22:56
V php se ze stringu pole dělá funkcí explode ne implode.
Pokud je v php pole, tak na předání do js lze použít json_encode($pole); |
||
Ikki Profil |
Ahoj,
děkuji za odpověď. json_encode mě napadl taktéž, problém je v tom, že pole ve výsledku vypadá skoro stejně -> ["kategorie1, kategorie2, kategorie3"]
Select ale pobírá jen ["kategorie1", "kategorie2", "kategorie3"], dokonce ani s explode se mi nepodařilo vměstnat " " mezi kategorie.
|
||
Keeehi Profil |
#4 · Zasláno: 14. 4. 2021, 18:46:05
Ikki:
Začněme tím, že ukládat více hodnot do jednoho řádku nebo buňky v databázi není zrovna dobrý nápad. Ta hodnota se v databázi vezme kde? K čemu všemu se používá? Jestli je to jen pro tento jeden případ, bude lepší, když v databázi budeš mít přímo uložený ten JSON. Tedy že hodnota bude už přímo ["kategorie1", "kategorie2", "kategorie3"]
Samozřejmě, že to jde transformovat i po vytažení z databáze z hodnoty co tam máš teď. Ale když už ten návrh DB není ideální, pojďme to vyřešit nejlépe jak to jen v rámci omezení jde. |
||
Ikki Profil |
Keeehi:
to samozřejmě vím, ale bohužel je to tak nastavené z původního systému, který musím zachovat. Pak se to nějakým záhadným způsobem využívá k vyhledávání a vypisování na základě kategorií v administraci, což mi zase v tomto případě přijde logičtější než vyhledávat ve dvou tabulkách. Jiný důvod mě k tomuto zápisu nenapadá. Zadává jí tam člověk právě prostřednictvím Select2 v administraci - vše funguje víceméně v pohodě, ale v administraci při editaci položky nejsou vidět aktuální kategorie, které se vypisují z databáze. Nejblíže k řešení jsem se dostal využitím funkce str_replace - str_replace(', ', '", "', $detailData['category']); string(49) "kategorie1", " kategorie2", " kategorie3" , jenže tady opět nastává problém s mezerou za ", kterou se mi zatím nepodařilo odstranit.
Napadlo mě využít k tomu ještě trim, ale nezkoušel jsem, zatím. Děkuji za odpověď! |
||
Keeehi Profil |
Ikki:
No nemáš pravdu. str_replace jak ji máš napsanou tady tu mezeru samozřejmě odstraní. Aby tam zůstala, musely by ve vstupu být dvě za sebou. Nebo jsi měl v prvním parametru ',' a ne ', ' jak píšeš sem. Někde děláš chyby z nepozornosti.
Je nějaký problém, aby bylo v databázi uloženo už ["kategorie1", "kategorie2", "kategorie3"] a ne kategorie1, kategorie2, kategorie3 ? Je mnohem lepší vhodně upravit ty data při ukládání, než tady při výpisu. A pokud do PHP jako hodnota přichází už řetězec a ne pole, s úpravou by se mělo začít už v javascriptu, který tu hodnotu vytváří.
|
||
anonym_ Profil * |
#7 · Zasláno: 14. 4. 2021, 19:18:15
Ikki:
Explode toho stringu do pole a pak json_encode. json_encode(explode(', ', $str)); |
||
Keeehi Profil |
#8 · Zasláno: 14. 4. 2021, 19:25:23
anonym:
Když už mu chceš "pomoct" tak by bylo dobré, aby to alespoň nebylo závislé na tom, že tam ta mezera je. json_encode(array_map('trim', explode(',', $str))) |
||
anonym_ Profil * |
#9 · Zasláno: 14. 4. 2021, 19:39:53
Keeehi:
Tak ta mezera tam evidentně je. Nevíme, jestli ten string vzniká ručně, nebo jak implode z nějaké sady checkboxů, nebo jinak. Navíc, když už teoretizujeme, tak čárka může být i ve jméně kategorie (a může tam cíleně být bez mezery). A nebo taky ne. Čili, pokud máme dané "zadání", oddělovač ", " je relevantní. Cokoliv dalšího jsou spekulace, kterých si můžeme vymyslet dalších X. |
||
Časová prodleva: 7 dní
|
|||
Ikki Profil |
#10 · Zasláno: 21. 4. 2021, 14:43:59
Keeehi:
nakonec jsem dal na tebe a v celém systému to přepsal tak, aby se ukládal encode. Tvůj kód fungoval perfektně, problém byl poté na straně výpisu při rozvoji externího modulu, takže ve výsledku by to dalo více práce. Díky moc! |
||
Časová prodleva: 3 roky
|
0