Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: budowanie tablicy
Forum PHP.pl > Forum > PHP
chomiczek
Witajcie, zawiesiłem się przy pewnym projekcie i nie bardzo wiem jak go rozwiązać.

A mianowicie jako wynik końcowy chce osiągnąć tablicę, coś na wzór:
  1. $wiersz['czerwony'] = array(12,45,34,65,76);
  2. $wiersz['czarny'] = array(11,,36,2,7);
  3. $wiersz['zielony'] = array(11,4,,,9);


Zasadniczo nie ma tutaj żadnego problemu, problem pojawia się z danymi, które mam i które chce wpisać w taką tablicę, a mianowicie:
  1. [0] = Array(
  2. [id_product_attribute] => 549
  3. [id_product] => 329
  4. [reference] => an880wh-2xl
  5. [id_attribute_group] => 1
  6. [attribute_name] => White
  7. )
  8.  
  9. [1] = Array(
  10. [id_product_attribute] => 549
  11. [id_product] => 329
  12. [reference] => an880wh-2xl
  13. [id_attribute_group] => 2
  14. [attribute_name] => 2XL
  15. )
  16.  
  17. [2] = Array(
  18. [id_product_attribute] => 555
  19. [id_product] => 329
  20. [reference] => an880wh-L
  21. [id_attribute_group] => 1
  22. [attribute_name] => White
  23. )
  24.  
  25. [3] = Array(
  26. [id_product_attribute] => 555
  27. [id_product] => 329
  28. [reference] => an880wh-L
  29. [id_attribute_group] => 2
  30. [attribute_name] => L
  31. )


jak widzicie częścią wspólną są id_product_attribute oraz reference (dla poszczególnych par) i teraz jeżeli id_attribute_group == 1 to to powinna być wartość klucza mojej nowej tabeli, natomiast jeżeli id_attribute_group == 2 to wartość ta powinna być elementem mojej tablicy, ale.. nie pierwszym lepszym, ale w odpowiednim miejscu, miejsce zależy ile (w tym przypadku będzie rozmiarów).

Qrde zawiesiłem się i nie umie tego przeskoczyć :/

Jakaś pomoc/sugestia?
nospor
Napisz prosze dokladnie jak ma wygladac wynikowa tablica dla przedstawionego tutaj wyniku bo nie do konca rozumiem idee.
chomiczek
Ok, to może komplet danych zamieszcze.

Dane wejściowe:
https://pastebin.com/zGEfeeXC

i w tym konkretnym przypadku powinienem dostać tablicę:
  1. $mojaTablica['Camouflage Green'] = array('an939cmg-s','an939cmg-m','an939cmg-l','an939cmg-xl','an939cmg-2xl');
  2. $mojaTablica['Camouflage Sand'] = array('an939cms-s','an939cms-m','an939cms-l','an939cms-xl','an939cms-2xl');
nospor
Czyli co drugiego elementu w ogole do niczego nei potrzzebujesz. To tylko ulatwia sprawa

  1. $result = [];
  2. foreach ($arrray as $row) {
  3. if ($row['id_attribute_group'] == 2) {
  4. continue;
  5. }
  6.  
  7. $result[$row['attribute_name']][] = $row['reference'];
  8.  
  9. }
  10.  

I juz
chomiczek
Nie do końca tak jak mówisz piszesz, bo jak zauwazysz 'attribute_name' musi zostać pobrane wtedy jak id_attribute_group == 1, to jest para elementów, które zestawione razem powinny wskazać miejsce gdzie ma być wstawiony reference
nospor
No ale z tego co widze w przykladzie to referencje jest takie samo dla obu elementow wiec co za roznica z ktorego ja go wezme?

Cytat
, bo jak zauwazysz 'attribute_name' musi zostać pobrane wtedy jak id_attribute_group == 1
No i przeciez tak robie
chomiczek
Sprawdź proszę PW, jeżeli możesz.. reference nie ma znaczenia, ale ma znaczenie, w który element tablicy to włożysz.
nospor
Na PW nie ma wyjasnienia sytuacji.

Napisales ze masz brac gdy id_attribute_group == 1 no i tak jest robione. Pytam sie, co tu jest nei tak? Zrobilem dokladnie jak prosiles
chomiczek
Chyba nie do końca sie zrozumieliśmy, tak powinna wyglądać docelowa tablica
Cytat
----------------------------------
--------- S - M - L - XL - 2XL -
- green - 1 - 2 - 3 - 4 - 5 -
- sand - 6 - 7 - 8 - 9 - 10 -
- -
----------------------------------


Jeżeli mamy coś w kolorze green i rozmiar L to musi wartość być w pozycji 2, jeżeli mamy kolor green i rozmiar 2XL to pozycja 5, jeżeli mamy kolor sand w rozmiarze XL to powinien się pojawić jako pozycja 9.

Więc docelowa tablica powinna mieć postać i zawartość:
  1. $tablica['green'] = array('wartosc z rozmiaru S green', 'wartosc z rozmiaru M green', 'wartosc z rozmiaru L green', 'wartosc z rozmiaru L green', 'wartosc z rozmiaru XL green', 'wartosc z rozmiaru 2XL green');
  2. $tablica['sand'] = array('wartosc z rozmiaru S sand', 'wartosc z rozmiaru M sand', 'wartosc z rozmiaru L sand', 'wartosc z rozmiaru L sand', 'wartosc z rozmiaru XL sand', 'wartosc z rozmiaru 2XL sand');
nospor
Cytat
Chyba nie do końca sie zrozumieliśmy,


Kurcze, jak ktos ma cie dobrze zrozumiec gdy podajesz ze wynikiem ma byc

$mojaTablica['Camouflage Green'] = array('an939cmg-s','an939cmg-m','an939cmg-l','an939cmg-xl','an939cmg-2xl');
$mojaTablica['Camouflage Sand'] = array('an939cms-s','an939cms-m','an939cms-l','an939cms-xl','an939cms-2xl');

czyli wartosci referencji a nie zadne dodatkowe dane... Co jest niezrozumialego w: podaj DOKLADNIE jak ma wygladac wynikowa tablica?
chomiczek
To był przykład, docelowo ma być tak jak napisałem.
To ma być wynikiem:
  1. $mojaTablica['Camouflage Green'] = array('an939cmg-s','an939cmg-m','an939cmg-l','an939cmg-xl','an939cmg-2xl');


kwestia skąd te dane się tam znajdą, samo przepisanie poszczególnych wartości jest skazane na błąd.. Chociażby co w przypadku jeżeli nie będzie występował kolor green XL, wtedy tablica powinna wyglądać tak:
  1. $mojaTablica['Camouflage Green'] = array('an939cmg-s','an939cmg-m','an939cmg-l','','an939cmg-2xl');


nie ma tez pewności, że dane z rozmiarami są w dobrej kolejności, więc to:

  1. $mojaTablica['Camouflage Green'] = array('an939cmg-s','an939cmg-m','an939cmg-l','an939cmg-xl','an939cmg-2xl');


nie będzie tym samym co to:

  1. $mojaTablica['Camouflage Green'] = array('an939cmg-m','an939cmg-s','an939cmg-l','an939cmg-xl','an939cmg-2xl');
Pyton_000
Masz przede wszystkim zasadniczy problem. Polegasz na kolejności elementów w tablicy, a nie powinieneś. Jak dla mnie to ta struktura jest do wywalenia
chomiczek
ale ja własnie mówie, że nie mogę polegać na kolejności.. trzeba jakoś pogrupować te dane, żeby można było je włożyć w odpowiednie elementy nowej tablicy
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.