Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Długość działania foreach, Strasznie długo działa pętla foreach, da radę to zoptymalizować?
Creed
post 23.04.2012, 22:31:36
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.04.2012

Ostrzeżenie: (0%)
-----


Witam, Piszę połączenie mojego sklepu internetowego z API jednej z hurtowni.
Muszę pobrać wszystkie produkty wraz z ich informacjami (opis, zdjęcia, id itp itd). Produktów jest około 20 tyś.
Cały mój kod pobierania tego wygląda tak:
Kod
foreach($kategorie as $kat)
            {
                $config['CategoryId'] = $kat['Id'];                     //dodanie do config zmiennej id kategorii
                $katalog = $this->client->getProductList($config);
                $produkty_temp[$kat['Id']] = $katalog->getProductListResult->Products->rowProductList;  //pobranie produktów dla danych kategorii
            }
            $config = array(                                            //config dla pobrania informacji o produkcie
                'SessionKey'    => $this->sesja['SessionKey'],
                'Language'      => 'pl-PL',
                'Currency'      => 'PLN',
                'PoductId'      => 0
                );
            $produkty = array(                                          //tablica przechowująca konkretne produkty, wraz z informacjami
                'Nazwa'             =>0,
                'Kategoria_Id'      =>0,
                'Obrazki'           =>array(),
                'Cena_Netto'        =>0,
                'Opis'              =>0,
                'Id'                =>0,
                'Kod_Produktu'      =>0,
            );
            foreach ($produkty_temp as $klucz => $produkt)
            {
                foreach($produkt as $prod)
                {
                    if(isset($prod->Id))
                    {
                        $config['ProductId'] = $prod->Id;
                        $prod = $this->client->getProductInfo($config);
                        $prod = $prod->getProductInfoResult->Products;
                        if(isset($prod->rowProductInfo))
                        {
                            $Prod = $prod->rowProductInfo;
                            if(isset($Prod->Id) && isset($Prod->Name) && isset($Prod->PriceNett))
                            {
                                $produkty[$i]['Nazwa']      = $Prod->Name;
                                $produkty[$i]['Id']         = $Prod->Id;
                                $produkty[$i]['Cena_Netto'] = $Prod->PriceNett;
                                
                                if(isset($Prod->Description) && $Prod->Description != "")
                                    $produkty[$i]['Opis']    = $Prod->Description;
                                if(isset($Prod->ImgURL->string))
                                {
                                    
                                    if(is_array($Prod->ImgURL->string))
                                    {
                                        $obrazki = array();
                                        foreach($Prod->ImgURL->string as $obrazek)
                                        {
                                            $obrazki[] = $obrazek;
                                        }
                                        $produkty[$i]['Obrazki'] = $obrazki;
                                    }
                                    else
                                    {
                                        $produkty[$i]['Obrazki'] = $Prod->ImgURL->string;
                                    }
                                    
                                }
                                $i++;
                            }
                            $this->client->doNoop($this->sesja);
                        }
                    }

zmienna $kategorie to tablica zawierająca listę kategorii. Jest ich dokładnie 347. Później muszę pobrać każdy produkt dając jako argument funkcji getProductInfo tablicę z konfikuracją w której jest właśnie id kategorii. Więc najpierw tworzę $produkt_temp gdzie kluczem jest id kategorii a wartością lista produktów z tej kategorii. Potem dla każdego indeksu tej tablicy tworzę już zmienną $produkt w której przechowuje konkretne produkty wraz z ich informacjami. Te wszystkie warunki niestety są potrzebne bo zdarza się (nie wiem czemu) że jest tam produkt który nie ma id lub nie ma ceny itp itd. A te zmienne są potrzebne. ImgURL czasami jest tablicą a czasami jest zmienną string. Całość dla około 20 tyś produktów potrafi się robić nawet pare godzin. Można to jakoś zoptymalizować?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 14:22