Dziwny problem z Allegro WebApi

0

Witajcie, mam mały (a jednocześnie ogromny) problem ze skryptem opartym na Allegro WebApi. Mianowicie: próbuję napisać skrypt wyświetlający mi nr najbardziej zagnieżdżonych kategorii allegro (liści), które należą do danej kategorii nadrzędnej (w tym przypadku 'odziez obuwie dodatki'). Problem mam z jednym if-em: gdy robię warunek za pomocą koniunkcji to nie działa, gdy zagnieżdżam if w ifie to działa... i nie wiem o co biega...

Poniżej problematyczny fragment kodu.. Z góry wielkie dzięki za wskazanie błędu (może zmęczenie już daje popalić i się czegoś nie zauważa).

    $kategorieObiekt = $client->doGetCatsData($zapytanie_kategorie['countryId'],$zapytanie_kategorie['localVersion'],$zapytanie_kategorie['webapiKey']);
    
    echo 'PONIŻEJ LISTA KATEGORII:<br/>';
    $kategorieTablica = $kategorieObiekt['cats-list'];
    
    foreach ($kategorieTablica as $kategoria) {
    
        //od tego miejsca $kategoria to obiekt typu stdClass() 
        $sciezkaKategoriiObiekt  = $client->doGetCategoryPath($session['session-handle-part'],$kategoria->{'cat-id'}); // -> 
        //$sciezkaKategoriiObiekt  = $client->doGetCategoryPath($session['session-handle-part'],76078);
        $rozmiarKategoriiObiekt = count($sciezkaKategoriiObiekt);
        //var_dump($rozmiarKategoriiObiekt);// $rozmiarKategoriiObiekt;
        $sciezkaKategoriiTablica = $sciezkaKategoriiObiekt;
        $calkowitaSciezka = '';
        for($licznik=0; $licznik<$rozmiarKategoriiObiekt; $licznik++){
            //echo 'tutaj ';
            $calkowitaSciezka .= $sciezkaKategoriiTablica[$licznik]->{'cat-name'};
            $calkowitaSciezka .= '->';
        }
        
        //if($sciezkaKategoriiTablica[$rozmiarKategoriiObiekt-1]->{'cat-is-leaf'}==1 && strcmp($sciezkaKategoriiTablica[0]->{'cat-name'},'Odzież, Obuwie, Dodatki')==0) {
        //if($sciezkaKategoriiTablica[$rozmiarKategoriiObiekt-1]->{'cat-is-leaf'}==1 && $sciezkaKategoriiTablica[0]->{'cat-id'}==1454) {
        if($sciezkaKategoriiTablica[$rozmiarKategoriiObiekt-1]->{'cat-is-leaf'}==1){// and (strpos($calkowitaSciezka, 'Odzież, Obuwie, Dodatki')!==false)){//$sciezkaKategoriiObiekt[0]->{'cat-id'}==1454) {
            echo '<br/>Id kategorii: '.$kategoria->{'cat-id'}.', nazwa kategorii: '.$kategoria->{'cat-name'}.'<br/>';
            echo 'ściezka: '.$calkowitaSciezka.'<br/><br/>';
            if(strpos($calkowitaSciezka, 'Odzież, Obuwie, Dodatki')!==false)
                    echo 'rowne<br/>';
        }
        
    }

Problem z ostatnim ifem - te zakomentowane nie działają...

EDIT

if($sciezkaKategoriiTablica[$rozmiarKategoriiObiekt-1]->{'cat-is-leaf'}==1){// and (strpos($calkowitaSciezka, 'Odzież, Obuwie, Dodatki')!==false)){//$sciezkaKategoriiObiekt[0]->{'cat-id'}==1454) {
            if(strpos($calkowitaSciezka, 'Odzież, Obuwie, Dodatki')!==false) {
            echo '<br/>Id kategorii: '.$kategoria->{'cat-id'}.', nazwa kategorii: '.$kategoria->{'cat-name'}.'<br/>';
            echo 'ściezka: '.$calkowitaSciezka.'<br/><br/>';
            }
        }

w tej wersji jednak też nie działa... -.- mimo, że w wersji wyżej wypisuje słowo 'rowne'... nie rozumiem nic z tego

0

Czekaj, powoli:

1.Przetłumacz ten kod na angielski, daruj sobie pseudo notację węgierską w stylu słowa obiekt czy tablica w nazwie zmiennej (podobnie jak nie piszesz przecież $calkowitaSciezkaCiagZnakow.

2.Usuń komentarze.

3.Opisz konkretnie co się dzieje, nie dzieje, jakie jest oczekiwane zachowanie.

0
$categories = $client-> doGetCatsData($allegroData['countryId'],$allegroData['localVersion'],$allegroData['webapiKey']);
    
echo 'PONIŻEJ LISTA KATEGORII:<br/>';
$catsArray = $categories['cats-list'];
     
     foreach ($catsArray as $singleCat) {
     
         //od tego miejsca $singleCat to obiekt typu stdClass() 
         $catPath  = $client-doGetCategoryPath($session['session-handle-part'],$singleCat->{'cat-id'}); 
         
         $catPathSize = count($catPath);
         
         $pathArray = $catPath;
         $wholePath = '';
         for($counter=0; $counter<$catPathSize; $counter++){
             $wholePath .= $pathArray[$counter]->{'cat-name'};
             $wholePath .= '->';
         }
         
         //if($pathArray[$catPathSize-1]->{'cat-is-leaf'}==1 && strcmp($pathArray[0]->{'cat-name'},'Odzież, Obuwie, Dodatki')==0) {
         //if($pathArray[$catPathSize-1]->{'cat-is-leaf'}==1 && $pathArray[0]->{'cat-id'}==1454) {
         if($pathArray[$catPathSize-1]->{'cat-is-leaf'}==1){// and (strpos($wholePath, 'Odzież, Obuwie, Dodatki')!==false)){//$pathArray[0]->{'cat-id'}==1454) {
             echo '<br/>Id kategorii: '.$singleCat->{'cat-id'}.', nazwa kategorii: '.$singleCat->{'cat-name'}.'<br/>';
             echo 'ściezka: '.$wholePath.'<br/><br/>';
             if(strpos($wholePath, 'Odzież, Obuwie, Dodatki')!==false)
                     echo 'rowne<br/>';
         }
         
     }

Problem z ostatnim ifem - te zakomentowane nie działają...

EDIT

if($pathArray[$catPathSize-1]->{'cat-is-leaf'}==1){// and (strpos($wholePath, 'Odzież, Obuwie, Dodatki')!==false)){//$pathArray[0]->{'cat-id'}==1454) {
             if(strpos($wholePath, 'Odzież, Obuwie, Dodatki')!==false) {
             echo '<br/>Id kategorii: '.$singleCat->{'cat-id'}.', nazwa kategorii: '.$singleCat->{'cat-name'}.'<br/>';
             echo 'ściezka: '.$wholePath.'<br/><br/>';
             }
         }

w tej wersji jednak też nie działa... -.- mimo, że w wersji wyżej wypisuje słowo 'rowne'... nie rozumiem nic z tego

Wedle prośby poprawione na angielski.

Co do problemu: chcę mieć listę nr kategorii wraz z pełną ścieżką. Co nie działa: tworzy pełną ścieżkę i jeśli po tym oddzielnie sprawdzam czy ścieżką należy do kategorii głównej odzież obuwie dodatki o id=1454 to działa i przy tych ścieżkach wypisuje słowo "równe". Ale gdy sprawdzam przed wypisaniem ścieżki lub w jednym if jako koniunkcje to nic na ekranie się nie pojawia...

Komentarze zostawiłem żeby pokazać wszystkie sposoby jakich próbowałem.

0

Nikt nie ma jakiejś sugestii co można by z tym fantem poradzić? :(

0
 if($catPathArray[$catPathSize-1]->{'cat-is-leaf'}==1) {
      if(strpos($wholePath, "Odzież, Obuwie, Dodatki")!==false) {
            echo '<br/>Id kategorii: '.$singleCat->{'cat-id'};
            echo ', nazwa kategorii: '.$singleCat->{'cat-name'}.'<br/>';
            echo 'ściezka: '.$wholePath.'<br/><br/>';
      }
 }

Jeszcze jedno pytanie mi się nasunęło w związku z moim problemem. W zmiennej $wholePath przechowuję całkowitą ścieżkę podkategorii Allegro, tworzę ją poprzez operator konkatenacji. Za pomocą strpos sprawdzam, czy w danej ścieżce dla danej kategorii występuje podciąg "Odzież, Obuwie, Dodatki". I dla tego stringa konkretnego nie działa. Ale już jak zamieniłem ten string np. na "Numizmatyka" to bez problemu filtrował za pomocą drugiego if-a. I ni w ząb nie wiem co jest grane... o.O Możliwe, że strpos nie działa dobrze, jeśli tam są spacje i przecinki (chyba nie powinien się wykrzaczać)? Próbowałem też wyciąć pierwsze 23 znaki za pomocą substr i porównać z napisem "Odzież, Obuwie, Dodatki" i też nic to nie zmieniło - jak nie filtrowało, tak nie filtruje...

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