Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JSON] Wyciąganie danych
Forum PHP.pl > Forum > Przedszkole
RaiZeN
Witam, na początku zaznaczam że z json nigdy nie miałem do czynienia dlatego absolutnie nic nie rozumiem z tego, dlatego prosze o pomoc.
Mam taki kod:
  1. <?php
  2. $link = file_get_contents('http://steamcommunity.com/id/raizen99/inventory/json/730/2');
  3.  
  4. echo '<pre>';
  5. var_dump(json_decode($link, true));
  6. echo '</pre>';
  7. ?>


Wyświetla on cały mój ekwipunek z cs go w postaci json, ale chciałbym aby wyciągało do zmiennych php wszystkie wartości typu:
Kod
["name"]=>
      string(26) "Glock-18 | Water Elemental"


Kod
["actions"]=>
      array(1) {
        [0]=>
        array(2) {
          ["name"]=>
          string(18) "Inspect in Game..."
          ["link"]=>
          string(113) "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S%owner_steamid%A%assetid%D14323390804893811622"
        }
      }



Troche chaotycznie ale mam nadzieje że zrozumiecie. Z góry dzięki za pomoc. wink.gif
kreatiff
Możesz się odwoływać bezpośrednio do tablicy, którą otrzymujesz po zdekodowaniu pobranych danych, np.: $json["rgDescriptions"]["520027424_188530139"]["name"].

A jak chcesz od razu całą tablicę z wszystkimi wartościami, dla których klucz ma wartość "name" to tutaj jest funkcja, która to zrobi.
RaiZeN
Ok, aktualnie kod wygląda tak:
  1. $result = json_decode($link, true);
  2.  
  3. function recursiveFind(array $array, $needle)
  4. {
  5. $iterator = new RecursiveArrayIterator($array);
  6. $recursive = new RecursiveIteratorIterator($iterator,
  7. RecursiveIteratorIterator::SELF_FIRST);
  8. foreach ($recursive as $key => $value) {
  9. if ($key === $needle) {
  10. return $value;
  11. }
  12. }
  13. }
  14.  
  15. echo recursiveFind($result, "market_hash_name");


Ale wyświetla tylko pierwszą nazwę, jak zrobić aby wyświetlało wszystkie?
kreatiff
Daj w drugim argumencie funkcji recursiveFind samo "name" i sprawdź czy tablica zawiera wynikowa te wyniki, które potrzebujesz.
I nie jestem pewien, czy wpisanie tam samego "name" wyszuka też indeksy zawierające słowo name w sobie, tak jak w Twoim przykładzie "market_hash_name". Musisz porównać wyniki z tablicą na wejściu.
RaiZeN
"name" wyświetla: Glock-18 | Water Elemental
"market_hash_name" wyświetla: Glock-18 | Water Elemental (Field-Tested)

Także to jest bez różnicy, jakieś pomysły?
kreatiff
Skorzystaj z tej funkcji, którą zaproponował Ben Conley (ma tylko 1 głos, ale jest pierwsza na liście odpowiedzi segregując po aktywnych). To przy niej zwracana jest cała tablica z wszystkimi wartościami, gdzie indeks to "name" (dla naszego przykładu 47 pozycji).
RaiZeN
@up
Notice: Array to string conversion
I wyświetla tylko "Array". :c
kreatiff
Coś gdzieś musiałeś źle przypisać. SOA#1 wink.gif
  1. $link = file_get_contents('http://steamcommunity.com/id/raizen99/inventory/json/730/2');
  2. $link = json_decode($link, true);
  3.  
  4. function recursiveFind(array $array, $needle)
  5. {
  6. $iterator = new RecursiveArrayIterator($array);
  7. $recursive = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
  8. $aHitList = array();
  9. foreach ($recursive as $key => $value) {
  10. if ($key === $needle) {
  11. array_push($aHitList, $value);
  12. }
  13. }
  14. return $aHitList;
  15. }
  16.  
  17. $name = recursiveFind($link, "name");
  18. echo'<pre>',var_dump($name),'</pre>';
RaiZeN
To działa, wyświetla takie coś:
array(5) {
[0]=>
string(41) "Glock-18 | Water Elemental (Field-Tested)"
[1]=>
string(29) "USP-S | Torque (Minimal Wear)"
[2]=>
string(34) "AK-47 | Elite Build (Field-Tested)"
[3]=>
string(29) "M4A1-S | Nitro (Field-Tested)"
[4]=>
string(34) "Tec-9 | Urban DDPAT (Field-Tested)"
}

Jak zrobić aby było po przecinku?
P.s Dzięki wszystkim za cierpliwość biggrin.gif
kreatiff
implode
RaiZeN
A no tak, nie pomyślałem o tym. wink.gif
Dzięki wszystkim za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.