Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ Kategoryzwonie po danym statusie i numerze

Napisany przez: Bondar91 17.06.2019, 08:31:28

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. http://www.php.net/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. http://www.php.net/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. }

Napisany przez: Tomplus 17.06.2019, 10:26:50

Może podaj jeszcze tablicę jaką oczekujesz.

Napisany przez: Bondar91 17.06.2019, 10:31:14

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)

Napisany przez: Pyton_000 17.06.2019, 10:45:50

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;

Napisany przez: Bondar91 17.06.2019, 11:09:35

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. http://www.php.net/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. http://www.php.net/array(1) {
  18. [0]=>
  19. string(11) "1203"
  20. }
  21. ["TEST3"]=>
  22. http://www.php.net/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. }

Napisany przez: Tomplus 17.06.2019, 11:18:28

Z manuala


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



Napisany przez: Pyton_000 17.06.2019, 11:36:33

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.

Napisany przez: Bondar91 17.06.2019, 13:12:56

@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.

Napisany przez: Tomplus 17.06.2019, 13:28:23

  1. forach($array['status'] as $k => $v) {
  2. $status[$v][] = ['id' => $array['sid'][$k], 'waga' => $array['waga'][$k] ] ;
  3. }

Napisany przez: Bondar91 18.06.2019, 13:13:58

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. http://www.php.net/array(4) {
  2. ["AFTHRS"]=>
  3. http://www.php.net/array(6) {
  4. [0]=>
  5. http://www.php.net/array(2) {
  6. ["s_id"]=>
  7. string(4) "1397"
  8. ["waga"]=>
  9. int(20)
  10. }
  11. [1]=>
  12. http://www.php.net/array(2) {
  13. ["s_id"]=>
  14. string(4) "3034"
  15. ["waga"]=>
  16. int(20)
  17. }
  18. [2]=>
  19. http://www.php.net/array(2) {
  20. ["s_id"]=>
  21. string(4) "3034"
  22. ["waga"]=>
  23. int(20)
  24. }
  25. [3]=>
  26. http://www.php.net/array(2) {
  27. ["s_id"]=>
  28. string(4) "3034"
  29. ["waga"]=>
  30. int(20)
  31. }
  32. [4]=>
  33. http://www.php.net/array(2) {
  34. ["s_id"]=>
  35. string(4) "3034"
  36. ["waga"]=>
  37. int(20)
  38. }
  39. [5]=>
  40. http://www.php.net/array(2) {
  41. ["s_id"]=>
  42. string(4) "2324"
  43. ["waga"]=>
  44. int(20)
  45. }
  46. }
  47. ["TEST"]=>
  48. http://www.php.net/array(1) {
  49. [0]=>
  50. http://www.php.net/array(2) {
  51. ["s_id"]=>
  52. string(4) "1203"
  53. ["waga"]=>
  54. NULL
  55. }
  56. }
  57. ["REZCEN"]=>
  58. http://www.php.net/array(6) {
  59. [0]=>
  60. http://www.php.net/array(2) {
  61. ["s_id"]=>
  62. string(4) "671"
  63. ["waga"]=>
  64. int(30)
  65. }
  66. [1]=>
  67. http://www.php.net/array(2) {
  68. ["s_id"]=>
  69. string(4) "3657"
  70. ["waga"]=>
  71. int(30)
  72. }
  73. [2]=>
  74. http://www.php.net/array(2) {
  75. ["s_id"]=>
  76. string(4) "4597"
  77. ["waga"]=>
  78. int(30)
  79. }
  80. [3]=>
  81. http://www.php.net/array(2) {
  82. ["s_id"]=>
  83. string(4) "7055"
  84. ["waga"]=>
  85. int(30)
  86. }
  87. [4]=>
  88. http://www.php.net/array(2) {
  89. ["s_id"]=>
  90. string(4) "1919"
  91. ["waga"]=>
  92. int(30)
  93. }
  94. [5]=>
  95. http://www.php.net/array(2) {
  96. ["s_id"]=>
  97. string(4) "8845"
  98. ["waga"]=>
  99. int(30)
  100. }
  101. }
  102. ["NOWE"]=>
  103. http://www.php.net/array(9) {
  104. [0]=>
  105. http://www.php.net/array(2) {
  106. ["s_id"]=>
  107. string(4) "9812"
  108. ["waga"]=>
  109. int(40)
  110. }
  111. [1]=>
  112. http://www.php.net/array(2) {
  113. ["s_id"]=>
  114. string(4) "5279"
  115. ["waga"]=>
  116. int(40)
  117. }
  118. [2]=>
  119. http://www.php.net/array(2) {
  120. ["s_id"]=>
  121. string(4) "3005"
  122. ["waga"]=>
  123. int(40)
  124. }
  125. [3]=>
  126. http://www.php.net/array(2) {
  127. ["s_id"]=>
  128. string(4) "3121"
  129. ["waga"]=>
  130. int(40)
  131. }
  132. [4]=>
  133. http://www.php.net/array(2) {
  134. ["s_id"]=>
  135. string(4) "5742"
  136. ["waga"]=>
  137. int(40)
  138. }
  139. [5]=>
  140. http://www.php.net/array(2) {
  141. ["s_id"]=>
  142. string(4) "1203"
  143. ["waga"]=>
  144. int(40)
  145. }
  146. [6]=>
  147. http://www.php.net/array(2) {
  148. ["s_id"]=>
  149. string(4) "3625"
  150. ["waga"]=>
  151. int(40)
  152. }
  153. [7]=>
  154. http://www.php.net/array(2) {
  155. ["s_id"]=>
  156. string(4) "3034"
  157. ["waga"]=>
  158. int(40)
  159. }
  160. }



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)