Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Patrik Smělý:31.7.2014 14:41

Dobrý den, mám JSON v něm je

{
   "uzivateldata": [
      {
         "uzivatel_data_typ": "vip",
         ......
      },
      {
         "uzivatel_data_typ": "vip.II",
         ......
         }
      }

A nevím jak mám vypsal jen třeba VIP.II protože každý uživatel, v tom jsonu bude mít něco jiného např jeden [výše] a druhý.

{
   "uzivateldata": [
      {
         "uzivatel_data_typ": "vip",
         ......
      },
         "uzivatel_data_typ": "borec",
         ......
      },
      {
         "uzivatel_data_typ": "vip.II",
         ......
         }
      }

normálně bych to udělal:

$neco['uzivateldata']['2']['uzivatel_data_typ']

ale tak to nejde proto, se tu ptám. Děkuji za váš čas.

Odpovědět 31.7.2014 14:41
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý
Filip Šohajek:31.7.2014 16:14

A zkoušel jsi

$neco['uzivateldata'][1]['uzivatel_data_typ']

?
mmchdm. máš ten string vůbec dekódovaný?

Editováno 31.7.2014 16:15
 
Nahoru Odpovědět 31.7.2014 16:14
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Odpovídá na Filip Šohajek
Patrik Smělý:31.7.2014 16:15

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.

Nahoru Odpovědět 31.7.2014 16:15
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý
Filip Šohajek:31.7.2014 16:17

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ý?

Editováno 31.7.2014 16:17
 
Nahoru Odpovědět 31.7.2014 16:17
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Odpovídá na Filip Šohajek
Patrik Smělý:31.7.2014 16:17

Ano mám, ale chápeš já potřebuji vypsat jen data kde se uzivatel_data_typ = vip.II.

Editováno 31.7.2014 16:18
Nahoru Odpovědět 31.7.2014 16:17
PHP můj oblíbený jazyk......
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Odpovídá na Filip Šohajek
Patrik Smělý:31.7.2014 16:17

Toho jsem jsi vědom.

Nahoru Odpovědět 31.7.2014 16:17
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý
Filip Šohajek:31.7.2014 16:18

Tak to projeď cyklem, nebo pokud nepotřebuješ zrovna JSON, tak si to hoď do DB

 
Nahoru Odpovědět 31.7.2014 16:18
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Odpovídá na Filip Šohajek
Patrik Smělý:31.7.2014 16:24

JSON právě potřebuji.

Nahoru Odpovědět 31.7.2014 16:24
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý
Filip Šohajek:31.7.2014 16:24

A nebo můžeš použít PHPLinq http://phplinq.codeplex.com

 
Nahoru Odpovědět 31.7.2014 16:24
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Patrik Smělý:31.7.2014 16:28

A nejde to nějak normálně ?

Nahoru Odpovědět 31.7.2014 16:28
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý
Filip Šohajek:31.7.2014 16:30

Ne, leda cyklem, ale při více záznamech to udělá s výkonem nehezké věci.

 
Nahoru Odpovědět 31.7.2014 16:30
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Odpovídá na Filip Šohajek
Patrik Smělý:31.7.2014 16:35

To vážně není nic, v php kde by to šlo udělat nějak dobře ? :D

Nahoru Odpovědět 31.7.2014 16:35
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý
Filip Šohajek:31.7.2014 16:37

Přejdi na Python nebo Node.js :)

 
Nahoru Odpovědět 31.7.2014 16:37
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Odpovídá na Filip Šohajek
Patrik Smělý:31.7.2014 16:37

O to nemám zájem díky.

Nahoru Odpovědět 31.7.2014 16:37
PHP můj oblíbený jazyk......
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Patrik Smělý:31.7.2014 16:44

A ten PHPLinq vypadá zajímavě, dá se dobře použít ?

Nahoru Odpovědět 31.7.2014 16:44
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý
Filip Šohajek:31.7.2014 16:51

Jo, párkrát jsem ho použil pro podobné účely. Však uvidíš jak ti sedne, ale je jednoduchý na použití.

 
Nahoru Odpovědět 31.7.2014 16:51
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):31.7.2014 16:52

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.

Editováno 31.7.2014 16:52
Nahoru Odpovědět 31.7.2014 16:52
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Patrik Smělý:31.7.2014 16:58

Super díky, ale jak prak vypíši ty hodnoty co jsou v uzivatel_data_typ

Nahoru Odpovědět 31.7.2014 16:58
PHP můj oblíbený jazyk......
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):31.7.2014 17:18

Joo tak to pak bez toho cyklu asi nepůjde. Nenapadá mě jiný způsob, jak zjistit číslo klíče daného záznamu.

Nahoru Odpovědět 31.7.2014 17:18
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):31.7.2014 17:24

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"];
Nahoru Odpovědět 31.7.2014 17:24
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Patrik Smělý:31.7.2014 17:31

Takže by to v podstatě šlo i bez cyklu ?

Nahoru Odpovědět 31.7.2014 17:31
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý
Filip Šohajek:31.7.2014 17:32

Ano, za své poněkud neohrabané řešení se omlouvám

 
Nahoru Odpovědět 31.7.2014 17:32
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):31.7.2014 17:33

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.

Nahoru Odpovědět 31.7.2014 17:33
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Artas
Redaktor
Avatar
Artas:31.7.2014 17:37

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);
 
Nahoru Odpovědět 31.7.2014 17:37
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Patrik Smělý:31.7.2014 18:12
"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.

Nahoru Odpovědět 31.7.2014 18:12
PHP můj oblíbený jazyk......
Avatar
Artas
Redaktor
Avatar
Odpovídá na Patrik Smělý
Artas:31.7.2014 18:17

Chapu dobre, ze potrebujes vypsat pocet kill u vsech uzivatelu na mape3?

 
Nahoru Odpovědět 31.7.2014 18:17
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Odpovídá na Artas
Patrik Smělý:31.7.2014 18:20

No i všechny co v tom je i či-li i killi u mapy 3.

Nahoru Odpovědět 31.7.2014 18:20
PHP můj oblíbený jazyk......
Avatar
Artas
Redaktor
Avatar
Odpovídá na Patrik Smělý
Artas:31.7.2014 18:50

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;
}
Editováno 31.7.2014 18:50
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 31.7.2014 18:50
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Odpovídá na Artas
Patrik Smělý:31.7.2014 19:34

Nefunguje

Nahoru Odpovědět 31.7.2014 19:34
PHP můj oblíbený jazyk......
Avatar
Patrik Smělý
Tým ITnetwork
Avatar
Odpovídá na Artas
Patrik Smělý:31.7.2014 19:44

Sorry, je to na 100% funkční měl jsem špatně proměnou. Děkuji za radu moc :)

Nahoru Odpovědět  +1 31.7.2014 19:44
PHP můj oblíbený jazyk......
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 30 zpráv z 30.