Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kategoryzwonie po danym statusie i numerze
Forum PHP.pl > Forum > PHP
Bondar91
Witam, nie wiem jak rozwiązać pewien problem, mam sobie tablicę składającą się ze zmiennych podanych niżej. Jak widac jest to identyfikator oraz status. Ten sam Identyfiktator może występować kilka razy. Nie mogę wpaść na pomysł , jak to kategoryzować, chodzi o to, że jak mam taki sam identyfiktor kilka razy, to musze jeden konkretny zliczyć po STATUSIE resztę odrzucić , mianowicie tutaj mamy statusy takie jak TEST i TEST2, dla rekordu 3034 chciałbym tylko zliczyć status TEST2, dodatkowo mam u sibie dwie tablice o nazwach danej kategori czyli test i test2 , wrzucając rekord do tablicy test2 majacy status TEST2 , nie może on już się znaleźć w tablicy o nazwie test mimo , że ten rekord posiada takie statusy. Czy ktoś mógłby pomoć i nakierować smile.gif
  1. ["s_id"]=>
  2. array(4) {
  3. [0]=>
  4. string(11) "1397"
  5. [1]=>
  6. string(11) "3034"
  7. [2]=>
  8. string(11) "3034"
  9. [3]=>
  10. string(11) "3034"
  11. }
  12. ["STATUS"]=>
  13. array(50) {
  14. [0]=>
  15. string(6) "TEST"
  16. [1]=>
  17. string(6) "TEST"
  18. [2]=>
  19. string(6) "TEST2"
  20. [3]=>
  21. string(6) "TEST"
  22. }
Tomplus
Może podaj jeszcze tablicę jaką oczekujesz.
Bondar91
Wystarczy mi z tego przykładu co podałem zwrócic:

tutaj wszykie rekrody które maja statusy TEST
tab_test = array(1397)

tutaj wszykie rekrody które maja statusy TEST2
tab_test2 = array(3034)
Pyton_000
Obie tablice zawsze mają tyle samo wartości?

Jeśli tak to lecisz foreach po jednej i pakujesz do nowej tablicy:

Cytat
$dante[$status][] = $id;
Bondar91
Dzięki, dostałem taką tablicę , i sytuacja z indetyfikatorem 3034 jest następująca występuje 4 razy o statusie TEST i raz TEST3, tutaj potrzebowałbym usuwać ten identyfikator z tablicy TEST i zliczać go tylko w tablicy o statusie TEST3, gydż jest to status ważniejszy, tak samo by było w sytuacji gdyby ten rekord znajdował sie w statusie TEST2 , to ważneijszy byłby status TEST3 , wieć ze statusu TEST2 musiałbym ten rekord usuwac.
  1. ["TEST"]=>
  2. array(6) {
  3. [0]=>
  4. string(11) "1397"
  5. [1]=>
  6. string(11) "3034"
  7. [2]=>
  8. string(11) "3034"
  9. [3]=>
  10. string(11) "3034"
  11. [4]=>
  12. string(11) "3034"
  13. [5]=>
  14. string(11) "2324"
  15. }
  16. ["TEST2"]=>
  17. array(1) {
  18. [0]=>
  19. string(11) "1203"
  20. }
  21. ["TEST3"]=>
  22. array(6) {
  23. [0]=>
  24. string(11) "2671"
  25. [1]=>
  26. string(11) "3657"
  27. [2]=>
  28. string(11) "4597"
  29. [3]=>
  30. string(11) "7055"
  31. [4]=>
  32. string(11) "3034"
  33. [5]=>
  34. string(11) "3845"
  35. }
Tomplus
Z manuala


  1.  
  2. $array = [
  3. 's_id' => [1397, 3034, 1397, 3034,1397],
  4. 'status' => []
  5. ];
  6. $my_value = 1397;
  7. $filtered_array = array_filter($array['s_id],
  8. function ($element) use ($my_value) {
  9. return ($element == $my_value); }
  10. );
  11. print_r($filtered_array);


Pyton_000
Ja zrobiłbym tablicę statusów z wagami od najwyższej do najniższej np:

Kod
test3 => 10
test2 => 5
test => 1


Potem iterował po tej tablicy a potem wew po tablicy wynikowej czyli:

Kod
foreach $wagi:
    foreach $wynikowa[$waga]:


Sprawdzasz sobie czy istnieje id już przefiltrowane jeśli nie to odkładasz gdzieś. a potem jeśli już istnieje to w kolejnych filtrach usuwasz te wartości.
Bondar91
@Tomplus dzięki, jednak nie o to chodziło, to co napisałeś faktycznie usuwa dany element ale całkowicie , więc tutaj się nie nada.
@Pyton_000 również dzięki może pokombinuje z tym co napisałeś, chociaż tych statusów jest z 44 i zapomniałem dodac bo niektóre z tych statusów bedą miały taką samą wagę , więc kolejna rzecz dochodzi. Sorki też za to ze nie wszytko pisze na raz.
Tomplus
  1. forach($array['status'] as $k => $v) {
  2. $status[$v][] = ['id' => $array['sid'][$k], 'waga' => $array['waga'][$k] ] ;
  3. }
Bondar91
Dzięki za pomoc ,otrzymałem teraz następującą tablicę. Czym wyższa waga dla danego rekordu, to reszta rekordów z tym samym s_id zostaje nie brana pod uwagę, pożniej to zliczam w sensie do tych 4 statsuów licze unikalną ilość rekordów bez dubli. Ttutaj nadal mam problem jak z takiej tablicy mogę sprawdzać i usuwać rekordy, które mają niższą wagę i występują w kilku statusach.
  1. array(4) {
  2. ["AFTHRS"]=>
  3. array(6) {
  4. [0]=>
  5. array(2) {
  6. ["s_id"]=>
  7. string(4) "1397"
  8. ["waga"]=>
  9. int(20)
  10. }
  11. [1]=>
  12. array(2) {
  13. ["s_id"]=>
  14. string(4) "3034"
  15. ["waga"]=>
  16. int(20)
  17. }
  18. [2]=>
  19. array(2) {
  20. ["s_id"]=>
  21. string(4) "3034"
  22. ["waga"]=>
  23. int(20)
  24. }
  25. [3]=>
  26. array(2) {
  27. ["s_id"]=>
  28. string(4) "3034"
  29. ["waga"]=>
  30. int(20)
  31. }
  32. [4]=>
  33. array(2) {
  34. ["s_id"]=>
  35. string(4) "3034"
  36. ["waga"]=>
  37. int(20)
  38. }
  39. [5]=>
  40. array(2) {
  41. ["s_id"]=>
  42. string(4) "2324"
  43. ["waga"]=>
  44. int(20)
  45. }
  46. }
  47. ["TEST"]=>
  48. array(1) {
  49. [0]=>
  50. array(2) {
  51. ["s_id"]=>
  52. string(4) "1203"
  53. ["waga"]=>
  54. NULL
  55. }
  56. }
  57. ["REZCEN"]=>
  58. array(6) {
  59. [0]=>
  60. array(2) {
  61. ["s_id"]=>
  62. string(4) "671"
  63. ["waga"]=>
  64. int(30)
  65. }
  66. [1]=>
  67. array(2) {
  68. ["s_id"]=>
  69. string(4) "3657"
  70. ["waga"]=>
  71. int(30)
  72. }
  73. [2]=>
  74. array(2) {
  75. ["s_id"]=>
  76. string(4) "4597"
  77. ["waga"]=>
  78. int(30)
  79. }
  80. [3]=>
  81. array(2) {
  82. ["s_id"]=>
  83. string(4) "7055"
  84. ["waga"]=>
  85. int(30)
  86. }
  87. [4]=>
  88. array(2) {
  89. ["s_id"]=>
  90. string(4) "1919"
  91. ["waga"]=>
  92. int(30)
  93. }
  94. [5]=>
  95. array(2) {
  96. ["s_id"]=>
  97. string(4) "8845"
  98. ["waga"]=>
  99. int(30)
  100. }
  101. }
  102. ["NOWE"]=>
  103. array(9) {
  104. [0]=>
  105. array(2) {
  106. ["s_id"]=>
  107. string(4) "9812"
  108. ["waga"]=>
  109. int(40)
  110. }
  111. [1]=>
  112. array(2) {
  113. ["s_id"]=>
  114. string(4) "5279"
  115. ["waga"]=>
  116. int(40)
  117. }
  118. [2]=>
  119. array(2) {
  120. ["s_id"]=>
  121. string(4) "3005"
  122. ["waga"]=>
  123. int(40)
  124. }
  125. [3]=>
  126. array(2) {
  127. ["s_id"]=>
  128. string(4) "3121"
  129. ["waga"]=>
  130. int(40)
  131. }
  132. [4]=>
  133. array(2) {
  134. ["s_id"]=>
  135. string(4) "5742"
  136. ["waga"]=>
  137. int(40)
  138. }
  139. [5]=>
  140. array(2) {
  141. ["s_id"]=>
  142. string(4) "1203"
  143. ["waga"]=>
  144. int(40)
  145. }
  146. [6]=>
  147. array(2) {
  148. ["s_id"]=>
  149. string(4) "3625"
  150. ["waga"]=>
  151. int(40)
  152. }
  153. [7]=>
  154. array(2) {
  155. ["s_id"]=>
  156. string(4) "3034"
  157. ["waga"]=>
  158. int(40)
  159. }
  160. }


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.