Powielanie wartości przy tworzeniu tablicy asocjacyjnej

0

Witam, próbuję stworzyć tablicę asocjacyjną na podstawie informacji pobranych z bazy danych. Problem polega na tym, że przy każdej iteracji wartości z poprzedniego zestawu danych przechodzą na kolejną i dodawane są wartości z aktualnego zastawu. Próbowałam dodawać tablice by oddzielić wartości z danego zestawu informacji lecz bez powodzenia. Aktualnie kod wygląda tak:

public function parametersCollectionTagsAllegro()
    {
        $allCategories = MysqlProducts::getCategoryProduct();
        // print_r($allCategories);

        $arrayAllCollections = [];
        $n = 1;

        foreach($allCategories as $tags)
        {
            $productTags = explode(",", $tags['tags']);
            print_r($n . "</br>");
            $maxCollectionLength = "";
            
            $colection = "Kolekcja";            

            foreach($productTags as $productTag)
            {
                if((strpos($productTag, $colection) !== false) && (strlen($productTag) > $maxCollectionLength))
                {
                    $maxCollectionLength = trim($productTag);
                }               

                elseif((strpos($productTag, $colection) === false))
                {
                    $parameter = trim($productTag);
                    $arrParameter[] = $parameter; 
                }  
            }

            $collectionParameters = array('collection'=>$maxCollectionLength,'parameters'=>$arrParameter);
            print_r($collectionParameters);

            $arrayAllCollectionsParameters = array('collections'=>$collectionParameters);
            $n += 1;
        }
        return $arrayAllCollectionsParameters;
}

Próbka przykładowo wyświetlanych danych:

Array ( [collection] => Kolekcja-Pierwsza [parameters] => Array ( [0] => parametr1 [1] => parametr2 [2] => parametr3 [3] => parametr4 [4] => parametr5 [5] => parametr6 ) )
Array ( [collection] => Kolekcja-Druga [parameters] => Array ( [0] => parametr1(poprzedni-zestaw) [1] => parametr2(poprzedni-zestaw) [2] => parametr3(poprzedni-zestaw) [3] => parametr4(poprzedni-zestaw) [4] => parametr5(poprzedni-zestaw) [5] => parametr6(poprzedni-zestaw) [6] => parametr7(aktualny-zestaw) [7] => parametr8(aktualny-zestaw) [8] => parametr9(aktualny-zestaw) ) )

Dziękuję za wszelką pomoc.

3

Jakie jest pytanie? Jaki jest problem?

2

CY chodzi o nadpisywanie zmiennej $maxCollectionLength ?

1

Odpowiadaj w postach. Ciężko się domyśleć problemu. Ty pisałaś kod więc dla Ciebie pojęcie kolekcji jest jasne. Ja tu widzę kilka zmiennych z nazwami sugerującymi parametry kolekcji. Masz też dwie pętle, tym samym ciężko zgadać o którą chodzi i o jaką zmienną.

3

@kasia13130: Nigdzie nie "zerujesz" tablicy $arrParameter w pętli foreach i cały czas dopisujesz do tej tablicy.

0

Chodzi o wewnętrzną pętlę z instrukcją if/elseif, oraz zmienną $parameter (właściwość produktu). Pętla ta przechodzi po elementach (stringach) zawartych w wierszu (dotyczący produktu), następnie w elseif jeśli elementy nie zawierają w sobie nazwy Kolekcja (kategoria produktu) to wtedy każdy z nich jest dodawany do tablicy $arrParameter. Następnie tablica ta jest umieszczana do tablicy asocjacyjnej $collectionParameters. Problem tkwi w momencie gdy pierwsza iteracja pętli wewnętrznej zostanie wykonana (czyli elementy zostaną dodane to tablicy) to po przejściu do kolejnego wiersza (zewnętrzna pętla) elementy z $arrParameter[] = $parameter (z poprzedniej iteracji) nie powinny przechodzić do kolejnej tylko powinny być dodane te które są w aktualnym wierszu (iteracji).

2

No to @leonpro778 trafił.

$arrParameter = []; // zeruj zmienną przed wykonaniem pętli
        foreach($productTags as $productTag)
        {
            if((strpos($productTag, $colection) !== false) && (strlen($productTag) > $maxCollectionLength))
            {
                $maxCollectionLength = trim($productTag);
            }               

            elseif((strpos($productTag, $colection) === false))
            {
                $parameter = trim($productTag);
                $arrParameter[] = $parameter; 
            }  
        }
0

@leonpro778: Czyli powinnam przed pętlą wewnętrzną stworzyć tablicę $arrParameter pustą, następnie w pętli dodawać elementy. Po ponownym wejściu do pętli powinno dodać tylko nowe elementy ? Czy się mylę ?

@jurek1980: Ok, sprawdzę

0

Udało się, bardzo dziękuję za pomoc :)

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