Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Grupowanie elementow tablicy
miszz
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 20.02.2004
Skąd: Zielona góra

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


Dzień dobry,

mam sobie n-elementową tablicę:
  1. (
  2. [0] => Array
  3. (
  4. [surowiec_rodzaj] => 1000-1200
  5. [surowiec_cecha3] => DUZO
  6. [surowiec_cecha4] => X
  7. [surowiec_cecha5] => Y
  8. [surowiec_cecha6] => Z
  9. [produkt_id] => K22222
  10. [wynik] => 0.00042
  11. [jm] => szt
  12. )
  13.  
  14. [1] => Array
  15. (
  16. [surowiec_rodzaj] => 114-41
  17. [surowiec_cecha3] => DUZO
  18. [surowiec_cecha4] => X
  19. [surowiec_cecha5] => Y
  20. [surowiec_cecha6] => Z
  21. [produkt_id] => N111111
  22. [wynik] => 4.4
  23. [jm] => szt
  24. )
  25. [2] => Array
  26. (
  27. [surowiec_rodzaj] => 114-41
  28. [surowiec_cecha3] => MALO
  29. [surowiec_cecha4] => x
  30. [surowiec_cecha5] => Y
  31. [surowiec_cecha6] => Z
  32. [produkt_id] => ASD7888
  33. [wynik] => 4.4
  34. [jm] => szt
  35. )
  36. }


Zastanawiam się jak pogrupować elementy ze względu na podobieństwo cech (surowiec_cecha3 do surowiec_cecha6).
Czyli pętla sobie leci sprawdzając jednocześnie czy w tablicy nie istnieje rekord z podobnymi cechami jeśli tak wyświetli je w jednym wierszu jeśli nie łamie linie.
K22222 - 1000-120_DUZO_X_Y_Z N111111 - 114-41_DUZO_X_Y_Z \n
ASD7888 - 114-41_MALO_X_Y_Z

proszę o podpowiedź jak się powinienem zorganizować z tym..

Ten post edytował miszz 25.08.2010, 09:34:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
tehaha
post
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


Cytat
Ale jeśli choćby jedna cecha się różni takowe grupowanie nie występuje.
czyli po prostu wszystkie 4 muszą być identyczne.

Ja bym to zrobił tak, że z tych 4 utworzyłbym unikatowy klucz w innej wielowymiarowej tablicy i tam tworzył grupy tablic z tymi samymi cechami

kod:
  1. $array = Array
  2. (
  3. "0" => Array
  4. (
  5. "surowiec_rodzaj" => "1000-1200",
  6. "surowiec_cecha3" => "DUZO",
  7. "surowiec_cecha4" => "X",
  8. "surowiec_cecha5" => "Y",
  9. "surowiec_cecha6" => "Z",
  10. "produkt_id" => "K22222",
  11. "wynik" => "0.00042",
  12. "jm" => "szt"
  13. ),
  14.  
  15. "1" => Array
  16. (
  17. "surowiec_rodzaj" => "114-41",
  18. "surowiec_cecha3" => "DUZO",
  19. "surowiec_cecha4" => "X",
  20. "surowiec_cecha5" => "Y",
  21. "surowiec_cecha6" => "Z",
  22. "produkt_id" => "N111111",
  23. "wynik" => "4.4",
  24. "jm" => "szt"
  25. ),
  26. "2" => Array
  27. (
  28. "surowiec_rodzaj" => "114-41",
  29. "surowiec_cecha3" => "MALO",
  30. "surowiec_cecha4" => "x",
  31. "surowiec_cecha5" => "Y",
  32. "surowiec_cecha6" => "Z",
  33. "produkt_id" => "ASD7888",
  34. "wynik" => "4.4",
  35. "jm" => "szt"
  36. ),
  37. "3" => Array
  38. (
  39. "surowiec_rodzaj" => "114-41",
  40. "surowiec_cecha3" => "MALO",
  41. "surowiec_cecha4" => "x",
  42. "surowiec_cecha5" => "Y",
  43. "surowiec_cecha6" => "E",
  44. "produkt_id" => "ASD7888",
  45. "wynik" => "4.4",
  46. "jm" => "szt"
  47. ),
  48. "4" => Array
  49. (
  50. "surowiec_rodzaj" => "114-41",
  51. "surowiec_cecha3" => "MALO",
  52. "surowiec_cecha4" => "x",
  53. "surowiec_cecha5" => "Y",
  54. "surowiec_cecha6" => "E",
  55. "produkt_id" => "ASD7888",
  56. "wynik" => "4.4",
  57. "jm" => "szt"
  58. ),
  59. "5" => Array
  60. (
  61. "surowiec_rodzaj" => "114-41",
  62. "surowiec_cecha3" => "MALO",
  63. "surowiec_cecha4" => "x",
  64. "surowiec_cecha5" => "Y",
  65. "surowiec_cecha6" => "E",
  66. "produkt_id" => "ASD7888",
  67. "wynik" => "4.4",
  68. "jm" => "szt"
  69. ),
  70. "6" => Array
  71. (
  72. "surowiec_rodzaj" => "114-41",
  73. "surowiec_cecha3" => "SREDNIO",
  74. "surowiec_cecha4" => "x",
  75. "surowiec_cecha5" => "Y",
  76. "surowiec_cecha6" => "E",
  77. "produkt_id" => "ASD7888",
  78. "wynik" => "4.4",
  79. "jm" => "szt"
  80. ),
  81. );
  82. $sorted = array();
  83.  
  84.  
  85. foreach($array as $key=>$value)
  86. {
  87. $unique_key = md5(strtolower($value['surowiec_cecha3'])."-".strtolower($value['surowiec_cecha4'])."-".strtolower($value['surowiec_cecha5'])."-".strtolower($value['surowiec_cecha6']));
  88.  
  89. if(array_key_exists($unique_key,$sorted))
  90. {
  91. $sorted[$unique_key][] = $value;
  92. }else
  93. {
  94. $sorted[$unique_key] = array();
  95. $sorted[$unique_key][] = $value;
  96. }
  97. }
  98. //print sorted arrays in one line per group
  99. foreach($sorted as $value)
  100. {
  101. foreach($value as $val)
  102. {
  103. echo $val['produkt_id']." - ".$val['surowiec_rodzaj']." ".$val['surowiec_cecha3']."_".$val['surowiec_cecha4']."_".$val['surowiec_cecha5']."_".$val['surowiec_cecha6']."    ";
  104. }
  105. echo "<br/>";
  106. }


daje mi taki wynik:
K22222 - 1000-1200 DUZO_X_Y_Z N111111 - 114-41 DUZO_X_Y_Z
ASD7888 - 114-41 MALO_x_Y_Z
ASD7888 - 114-41 MALO_x_Y_E ASD7888 - 114-41 MALO_x_Y_E ASD7888 - 114-41 MALO_x_Y_E
ASD7888 - 114-41 SREDNIO_x_Y_E

czyli w każdej linii tablice z tymi samymi cechami
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 3.10.2025 - 02:40