Odczytanie zmiennej w strukturze, tablicy struktur, tablicy struktur ;) poziom HARD

0

Otrzymuje taką tablice struktur:

tablica struktur1
-- zmienna
-- tablica struktur2
---- struktura1
------ zmienna1
---- struktura2
------ zmienna2
---- struktura3
------ zmienna3

jak odczytać wartość zmiennej: tablica struktur1 -> tablica struktur2 -> struktura1 -> zmienna1 ?
potrafię tylko odczytać: tablica struktur1 -> zmienna

echo $tab[0]->{'zmienna'};

jednak nie potrafię dostać się tak głęboko gdzie znajduje się np zmienna1
wszystkie próby kończyły się błędami.
próbowałem takimi sposobami jak:
$tab[0]->{'tablica struktur2'}{0}->{'struktura1'}->{'zmienna1'};
$tab[0][1][0]->{'zmienna'};
$tab[0]->{'zmienna', 0}->{'struktura1'}->{'zmienna1'};

w sumie to dużo tego było ale wszystko zakończyło się niepowodzeniem :(

0

zrób var_dump($tab) i wrzuć wynik - w tym momencie nie da się określić czy masz tam tablice czy obiekty

0

array(1) { [0]=> object(stdClass)#2 (2) { ["id"]=> int(321) ["data"]=> array(0) { } } }

0

no coś to chyba niepełny przykład, bo w tym masz tylko

$tab[0]->id; // 321
$tab[0]->data; // pusta tablica

nic więcej

0

Że tak powiem liczba 321 nie powinna być jako int O_o Powinna być jako long. Może to pomoże: http://allegro.pl/webapi/documentation.php/show/id,89#method-output
array(1) { [0]=> object(stdClass)#2 (2) { ["item-id"]=> int(2147483647) ["users-post-buy-data"]=> array(0) { } } }
wprowadzam liczbę aukcji większą od 2147483647. mimo to zwraca mi taką jak widać.

1

The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). 64-bit platforms usually have a maximum value of about 9E18. PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.

http://php.net/manual/en/language.types.integer.php

tablica struktur1 -> tablica struktur2 -> struktura1 -> zmienna1

tablica_struktur[nr_struktury1]->tablica_struktur[nr_struktury2]->struktura1->zmienna1

Tylko najpierw proszę Pana to się sprawdza czy element o danym indeksie istnieje. Nawet jeśli masz pewność, że taki element MUSI istnieć to powinieneś zrobić:

if( !isset( tablica_struktur[nr_struktury1]->tablica_struktur[nr_struktury2]->struktura1->zmienna1 ) ) echo "O fuk! Miało istnieć, a nie istnieje... Dziwne...";
0

Mam 64 bit system więc nie rozumiem czemu mam te problemy? XAMPP powinien korzystać z 64bitów.

0
tablica_struktur[nr_struktury1]->tablica_struktur[nr_struktury2]->struktura1->zmienna1

niestety to nie wypali poniważ tablica_struktur nie ma tego spodu _ tylko ma pauzę w nazwie...

0
items-post-buy-data["users-post-buy-data"]["user-data"]["user-id"]

Panie to są absolutne podstawy....

$dogetpostbuydata_response = array(
   'items-post-buy-data' => array(
      array(
         'item-id' => 972090662,   // dane kupującego (dla sprzedającego)
         'user-post-buy-data' => array(
            array(
               'user-data' => array(
                  'user-id' => 1235813,
                  'user-login' => 'janek123',
                  'user-rating' => 205,
                  'user-first-name' => 'Jan',
                  'user-last-name' => 'Nowak',
                  'user-maiden-name' => '',
                  'user-company' => 'Grupa Allegro Sp. z o. o.',
                  'user-country-id' => 1,
                  'user-state-id' => 15,
                  'user-postcode' => '60-324',
                  'user-city' => 'Poznań',
                  'user-address' => 'ul. Marcelińska 90',
                  'user-email' => '[email protected]',
                  'user-phone' => '987-654-321',
                  'user-phone2' => '',
                  'user-ss-status' => 0,
                  'site-country-id' => 1,
                  'user-junior-status' => 0,
                  'user-birth-date' => 0,
                  'user-has-shop' => 0,
                  'user-company-icon' => 0),
               'user-sent-to-data' => array(
                  'user-id' => 1235813,
                  'user-first-name' => 'Jan',
                  'user-last-name' => 'Nowak',
                  'user-company' => '',
                  'user-country-id' => 1,
                  'user-postcode' => '60-328',
                  'user-city' => ‘Poznań',
                  'user-address' => 'ul. Wspólna 80'),
               'user-bank-accounts' => array(),
               'company-second-address' => array(
                  'company-worker-first-name' => '',
                  'company-worker-last-name' => '',
                  'company-address' => '',
                  'company-postcode' => '',
                  'company-city' => '',
                  'company-country-id' => 0,
                  'company-state-id' => 0)))),
      array(
         'item-id' => 959671296,   // dane sprzedającego (dla kupującego)
         'user-post-buy-data' => array(
            array(
               'user-data' => array(
                  'user-id' => 24610129,
                  'user-login' => 'piotrek321',
                  'user-rating' => 306,
                  'user-first-name' => 'Piotr',
                  'user-last-name' => 'Kowalski',
                  'user-maiden-name' => '',
                  'user-company' => '',
                  'user-country-id' => 1,
                  'user-state-id' => 2,
                  'user-postcode' => '12-345',
                  'user-city' => 'Warszawa',
                  'user-address' => 'ul. Kolejowa 89',
                  'user-email' => '[email protected]',
                  'user-phone' => '111-222-333',
                  'user-phone2' => '(22)7123-456',
                  'user-ss-status' => 0,
                  'site-country-id' => 1,
                  'user-junior-status' => 0,
                  'user-birth-date' => 0,
                  'user-has-shop' => 1,
                  'user-company-icon' => 1),
               'user-sent-to-data' => array(
                  ' user-id' => 0,
                  ' user-first-name' => '',
                  ' user-last-name' => '',
                  ' user-company' => '',
                  ' user-country-id' => 0,
                  ' user-postcode' => '',
                  ' user-city' => '',
                  ' user-address' => ''),
               ' user-bank-accounts' => array(481122334455667788990011223344),
               ' company-second-address' => array(
                  ' company-worker-first-name' => 'Piotr',
                  ' company-worker-last-name' => 'Kowalski',
                  ' company-address' => '',
                  'company-postcode' => '',
                  'company-city' => '',
                  'company-country-id' => 0,
                  'company-state-id' => 0)))),
      array(
         'item-id' => 863180420,   // niepoprawny identyfikator oferty
         'user-post-buy-data' => array()))
);

Takiego czegoś nie umieć przeczytać? No przepraszam bardzo, ale jak w takim razie programować?

0

A co ma czytanie dokumentacji do niewiedzy jak dostać się tak daleko do zmiennej w odpowiedzi? Już w 1-szym poście wykazałem znajomość odpowiedzi allegro pisząc najprościej jak się dało strukturę tejże odpowiedzi... Może to nie ja do końca nie czytam? Oczywiście szanuję Ciebie bo widać że Twoja wiedza jest sporo większa od mojej dlatego tłumaczę trochę by wykazać że wiem co to dokumentacja.
Dodam że Twoja propozycja dotycząca wywołania nie ma prawa zadziałać. Brak indexów i nazwa bez cudzysłowa i nawiasu kwadratowego. Zaraz napiszesz że nie próbowałem. Aczkolwiek próbowałem i z nawiasem kwadratowym w pierwszej nazwie tablicy. W każdym wypadku błąd: Parse error: syntax error, unexpected '[', expecting ',' or ';' in /home/vhosts/abc.abc/cron_buyers.php

1

Wiesz Pan co robi znak '-'?

A wiesz Pan co robi:
zmienna-zmienna2-zmienna3?

To już masz Pan odpowiedź na pytanie skąd błąd.
Przy takim układzie jak zaprezentowany w doc allegro odnoszenie się do elementów wyglądało by tak:

$dogetpostbuydata_response["items-post-buy-data"][0]["users-post-buy-data"][0]["user-data"]["user-id"]

Jak chcesz Pan napisać coś skomplikowanego, skoro mojego powyższego zapisu nie potrafisz poprawić w locie??

Po drugie. Już widzę, że nie zabezpieczysz Pan serwera, ale nie mam siły tłumaczyć dlaczego i jak to zrobić. (zresztą wspomniałem o tym wyżej)

0

Poprawiłem $inf[0]->{'users-post-buy-data'}{0}->{'user-data'}->{'user-id'};
Jednak nie rozumiem dlaczego piszesz że nie radzę sobie ze skomplikowanymi rzeczami? Po prostu przesiadłem się na PHP i dopiero tutaj spotkałem problem. Co do tej liczby int'owej gdybym to robił na serwerze a nie na localhoście sam już dawno bym to rozwiązał moimi próbami-błędami. Mimo wszystko dzięki Panowie za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1