Diskuze: JSON decode -problém
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 30 zpráv z 30.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
A zkoušel jsi
$neco['uzivateldata'][1]['uzivatel_data_typ']
?
mmchdm. máš ten string vůbec dekódovaný?
Ahoj, bohužel to co potřebuji vypsat se nenachází na prvním místě, a ani ten json neovlivním. Takže to nejde jak jsi napsal.
Malá poznámka : v PHP se pole indexují od nuly (a ve všech ostatních programovacích jazycích taky) + podruhé se ptám : máš ten JSON dekódovaný?
Ano mám, ale chápeš já potřebuji vypsat jen data kde se uzivatel_data_typ = vip.II.
Tak to projeď cyklem, nebo pokud nepotřebuješ zrovna JSON, tak si to hoď do DB
A nebo můžeš použít PHPLinq http://phplinq.codeplex.com
A nejde to nějak normálně ?
Ne, leda cyklem, ale při více záznamech to udělá s výkonem nehezké věci.
To vážně není nic, v php kde by to šlo udělat nějak dobře ? 
A ten PHPLinq vypadá zajímavě, dá se dobře použít ?
Jo, párkrát jsem ho použil pro podobné účely. Však uvidíš jak ti sedne, ale je jednoduchý na použití.
Zkus něco takovýho:
$data = json_decode($jsonString);
$dataUzivatel = array_column($data["uzivateldata"], "uzivatel_data_typ");
if (in_array("vip.II", $dataUzivatel)) {
// v poli je vip.II
}
Nemám u sebe novější PHP verzi, která podporuje funkci array_column(), takže to neotestuji, ale mohlo by to fungovat.
Super díky, ale jak prak vypíši ty hodnoty co jsou v uzivatel_data_typ
Joo tak to pak bez toho cyklu asi nepůjde. Nenapadá mě jiný způsob, jak zjistit číslo klíče daného záznamu.
Teď jsem si vzpomněl na funkci array_search().
Zkoušel jsem tento script a vypsalo mi to 2:
$array = array(
"uzivateldata" => array(
array(
"typ" => "a",
"var" => 1
),
array(
"typ" => "b",
"var" => 2
),
array(
"typ" => "c",
"var" => 3
)
)
);
$data = array_column($array["uzivateldata"], "typ");
$key = array_search("b", $data);
echo $array["uzivateldata"][$key]["var"];
Ano, za své poněkud neohrabané řešení se omlouvám
Ty funkce uvnitř také určitě nějaké cykly dělají, ale pokud ti takové řešení stačí, tak je nemusíš psát sám.
Nebo lze pouzit funkci array_filter:
function filterData($var) {
return $var->uzivatel_data_typ == "vip.II";
}
$json = '{
"uzivateldata": [
{
"uzivatel_data_typ": "vip.II"
},
{
"uzivatel_data_typ": "vip"
},
{
"uzivatel_data_typ": "vip.II"
}
]}';
$data = json_decode($json);
$array = array_filter($data->uzivateldata, "filterData");
print_r($array);
"uzivateldata": [
{
"uzivatel_data_typ": "mapa",
"aggregatedStats": {
"kill": 24,
"asist": 62,
"umrti": 2
},
},
{
"uzivatel_data_typ": "mapa2",
"aggregatedStats": {
"kill": 10,
"asist": 20,
"umrti": 2
},
},
{
"uzivatel_data_typ": "mapa3",
"aggregatedStats": {
"kill": 20,
"asist": 10,
"umrti": 2
},
}
]}';
a potřebuji vypsal u mapa3 kill, ale problém je že třeba další uživatel může mít mapa4 což už by nešlo.
Chapu dobre, ze potrebujes vypsat pocet kill u vsech uzivatelu na mape3?
Moje reseni ti vrati pole objektu, ktere obashuji mapa3. Pak uz si je staci jen v cyklu projet a ziskat pozadovane hodnoty:
foreach ($array as $data) {
echo $data->aggregatedStats->kill;
}
Sorry, je to na 100% funkční měl jsem špatně proměnou. Děkuji za radu
moc 
Zobrazeno 30 zpráv z 30.
