Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyciąganie danych JSON przez PHP
Forum PHP.pl > Forum > Przedszkole
xaitras
Witam wszystkich forumowiczów

Borykam się z problemem od dłuższego czasu. Może ktoś pomoże..

Do tej pory wykombinowałem takie coś:

  1.  
  2. $params = array (
  3.  
  4. 'token' => 'xxx-xxx-xxxx-xxxx',
  5. 'method' => 'getOrders',
  6. 'parameters' => '{ "status_id": 36310}'
  7.  
  8. );
  9.  
  10. $query = http_build_query ($params);
  11.  
  12. $contextData = array (
  13. 'method' => 'POST',
  14. 'header' => "Connection: close\r\n" .
  15. "Content-Length: ".strlen($query)."\r\n",
  16. 'content'=> $query );
  17.  
  18.  
  19. $context = stream_context_create (array ( 'http' => $contextData ));
  20.  
  21. $result = file_get_contents ('https://api.baselinker.com/connector.php', false, $context);
  22.  
  23.  
  24. $dane = json_decode($result);
  25.  
  26. $w = var_dump($dane);
  27.  
  28. echo $w;
  29.  


Próbuję wyciągnąć wszystkie numery zamówień z danego statusu ( api baselinker )
Problem w tym, że nie wiem jak wyciągnąć tylko numery.. facepalmxd.gifsad.gif
Wyświetla mi wszystkie dane zamówienia.



Pozdrawiam i czekam na pomoc sciana.gif
markonix
Pokaż ten dump zmiennej $w
nospor
Zgodnie z dokumentacja:
https://api.baselinker.com/?method=getOrders
wszystko jest ok. Zwraca wszystkie dane. Jak chcesz miec tylko okreslony index z danych to uzyj chocby array_column()
http://php.net/manual/en/function.array-column.php
xaitras

Dzięki za podpowiedź..
Poćwiczę temat i odezwę się jeszcze.

To co mi wypluwa :

  1. Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in C:\WebServ\httpd\test.php on line 25
  2. object(stdClass)#1 (2) { ["status"]=> string(7) "SUCCESS" ["orders"]=> array(18) { [0]=> object(stdClass)#2 (47) { ["order_id"]=> int(17314526) ["external_order_id"]=> string(9) "724800438" ["order_source"]=> string(7) "allegro" ["order_source_id"]=> string(4) "6136" ["order_source_info"]=> string(1) "-" ["order_status_id"]=> int(36310) ["confirmed"]=> bool(true) ["date_confirmed"]=> string(10) "1498243222" ["date_add"]=> int(1498242770) ["user_login"]=> string(10) "glizda2008" ["phone"]=> string(9) "338647108" ["email"]=> string(14) "Roza15@onet.eu" ["user_comments"]=> string(0) "" ["admin_comments"]=> string(0) "" ["currency"]=> string(3) "PLN" ["payment_method"]=> string(4) "PayU" ["payment_method_cod"]=> string(1) "0" ["payment_done"]=> int(0) ["delivery_method"]=> string(16) "Pocztex Kurier48" ["delivery_price"]=> int(13) ["delivery_package_module"]=> string(0) "" ["delivery_package_nr"]=> string(0) ""


itd..

Niestety

array_column nie zadziałało bo nie jest obsługiwane przez tą wersję PHP
próbowałem też z array_search, compact i nie wiem co robię źle..

Mógłbyś podać jakiś przykład, jak wyciągnąć chociaż jedną wartość np. numer pod "order_id" ?

viking
W dokumentacji array_column
See Also ¶

» Recommended userland implementation for PHP lower than 5.5

i link
markonix
W dokumentacji array_column poniżej masz propozycje od programistów na alternatywy w przypadku niedostępności tej funkcji, a najlepiej zaktualizować te PHP bo to już staruszek.
xaitras
ok końcówka kodu wygląda tak:

  1.  
  2. $result = file_get_contents ('https://api.baselinker.com/connector.php', false, $context);
  3.  
  4.  
  5. $dane = json_decode($result);
  6.  
  7. $array = $dane;
  8. array_walk($array, function(&$value, $key, $return) {
  9. $value = $value[$return];
  10. }, 'order_id');
  11.  
  12. print_r($array);
  13.  


jestem pewnie blisko ale to w dalszym ciągu nie to.
Może ma ktoś jakieś sugestie?

Pyton_000
Przecież to błędem powinno wywalać.
xaitras
No właśnie nie wywala błędu tylko ostrzeżenie :

  1.  
  2. Warning: array_walk() expects parameter 1 to be array, string given in C:\WebServ\httpd\test.php on line 33
  3. {"status":"SUCCESS","orders":[{"order_id":17345415,"external_order_id":"725101700","order_source":"allegro","order_source_id":"6136","order_source_info":"-","order_status_id":36310,"confirmed":true,"date_confirmed":"1498387418","date_add":1498387147,"user_login":"kamii188","phone":"723756482","email":"kamii3@buziaczek.pl","user_comments":"","admin_comments":"","currency":"PLN","payment_method":"Przelew bankowy","payment_method_cod":"0","payment_done":0,"delivery_method":"Pocztex Kurier48","delivery_price":15,"delivery_package_module":"","delivery_package_nr":"","delivery_fullname":"Kamila Iwaszko","delivery_company":"","delivery_address":"Trzebicz Nowy 1","delivery_city":"Drezdenko","delivery_postcode":"66-530","delivery_country":"Polska","delivery_country_code":"PL","delivery_point_name":"","delivery_point_address":"","delivery_point_postcode":"","delivery_point_city":"","invoice_fullname":"Kamila Iwaszko","invoice_company":"","invoice_nip":"","invoice_address":"Trzebicz Nowy 1","invoice_city":"Drezdenko","invoice_postcode":"66-
  4.  


Może ktoś się zlituje i naprowadzi mnie jak wyciąnąć tylko numery "order_id" questionmark.gif
Pyton_000
Czyli błąd...

Masz wyraźnie powód nie działania...
nospor
Nie
$dane = json_decode($result);

a:
$dane = json_decode($result, true);
xaitras
ok wymodziłem coś takiego:

  1.  
  2. $dane = json_decode($result, true);
  3.  
  4. echo $dane['status'] ."<br />";
  5.  


wyświetla mi SUCCESS - prawidłowo bo w pobranych danych mam:
  1. Array ( [status] => SUCCESS [orders] => Array ( [0] => Array ( [order_id] => 17349137


jak teraz przejść do [order_id] aby odczytać numer zamówienia ?
nospor
echo $dane['orders'][0]['order_id'];

Postawa obslugi tablic, wypadaloby to ogarnac
viking
Najlepiej poczytać choc trochę o tablicach http://php.net/manual/en/language.types.array.php
$dane['orders'][0]['order_id']
xaitras
Dziękuję Ci, bardzo mi pomogłeś thumbsupsmileyanim.gif

Próbowałem z przestawianiem np. tak
  1. $dane['status'],['orders'],['order_id']
bo 0 mi nie przyjmowało - nie wiem dlaczego..
Jak człowiek siedzi nad tym tyle czasu to mu się mózg lasuje

Manual oczywiście czytałem ale na tej konkretnej tablicy poległem.
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.