Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Usuniecie liczb z przedzialu - pętle
S3baso
post 15.03.2013, 17:16:51
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 16.07.2010

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


Witam, mam problem z pętlami, mam dane liczby od np. 7000 do 9000 petla while lub for wypisuje te liczby, to zadna roznica, ale mam tez druga petle potrzebna do wyciagniecia liczb z bazy danych

  1. for($i=0; $i<$ilosc_wierszy; $i++) {
  2. echo $r[$i];
  3. }


Wyciaga tylko tyle liczb ile jest w bazie, czyli w tym przypadku wypisze jakies liczby, zalozmy 8002, 8220, 8035, 8100 i jak te liczby "wyciagnac" usunac z tamtej petli wyliczajacej liczby od 7000 do 9000 ?
Go to the top of the page
+Quote Post
PrinceOfPersia
post 15.03.2013, 17:31:45
Post #2





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


np. tak:
Kod
for ($j = 7000; $j <= 9000; $j++) {
  if (in_array($j, $r))
      continue;
  //---- cos rob
}


edit: poprawka, błąd w kodzie.



Ten post edytował PrinceOfPersia 15.03.2013, 17:42:27


--------------------
Go to the top of the page
+Quote Post
S3baso
post 15.03.2013, 17:38:59
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 16.07.2010

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


hmm, ale to sa osobne 2 petle, gdzie jedna od 0 do x wypisuje raz 1 raz 4 liczby a druga stale od 7 tysiecy do 9 tys

  1. $porty=7000;
  2. $porty_koniec=9000;
  3. while ($porty != $porty_koniec + 1)
  4. {
  5. echo $porty;
  6. ++$porty;
  7. }


z tej wyrzucic liczby o te:

  1. for($i=0; $i<$ilosc_wierszy; $i++) {
  2. echo $r[$i];
  3. }
Go to the top of the page
+Quote Post
PrinceOfPersia
post 15.03.2013, 17:41:49
Post #4





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


w moim poprzednim kodzie jest błąd - wieczna pętla, zaraz poprawię.

edit:

chyba wystarczy Ci jedna pętla:
Kod
$porty=7000;
$porty_koniec=9000;
while ($porty != $porty_koniec + 1)
{
  if (!in_array($porty, $r))
      echo $porty . "<br />";
  ++$porty;
}

zakładając, że w $r znajdują się liczby w takim formacie array(8002, 8220, 8035, 8100)

Ten post edytował PrinceOfPersia 15.03.2013, 17:48:45


--------------------
Go to the top of the page
+Quote Post
S3baso
post 15.03.2013, 18:23:08
Post #5





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 16.07.2010

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


ok, ale to nie tak ma dzialac, jak mam porownac if (in_array($j, $r)) skoro $r jest raz 1 liczba raz 100 liczb wiec musialbym po kolei porownywac $r[0], $r[1] itd. w zaleznosci od ilosci liczb, a jak mam zrobic petle w petli ?

#EDIT:

@UP zaraz to przestudiuje biggrin.gif


#EDIT2:

Jak to pobrac z mysqla w takim formacie ? Wszystkie liczby z $query = "SELECT port FROM users";

Jak pobrac wszystkie liczby z danej kolumny o nazwie port i zapisac w takim formacie?

Ten post edytował S3baso 15.03.2013, 18:01:04
Go to the top of the page
+Quote Post
Michael2318
post 15.03.2013, 21:31:43
Post #6





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Pętla z jakimiś tam liczbami, załóżmy od 0 do 9000:

  1. $count = 9000; // max. liczba ma wyniesc 9000
  2. $tablica_z_liczbami = array();
  3. for($i=0; $i<=$count; $i++)
  4. {
  5. $$tablica_z_liczbami[] = $i;
  6. }


Teraz wyciągamy jakieś tam wartości z bazy, nie wiem co to ma być więc załóżmy że wyciągamy wszystkie ID z tabeli `users`:

  1. $sql = "SELECT id FROM `users`";
  2. if ( !($result = mysql_query($sql)) )
  3. {
  4. die('error<br>'.mysql_error());
  5. }
  6. while($row = mysql_fetch_assoc($result))
  7. {
  8. $liczby_do_usuniecia[$row['id']] = $row['id'];
  9. }


W tym momencie w zmiennej (tablicy) $tablica_z_liczbami mamy wszystkie liczby od 0 do 9000 a w zmiennej (również tablicy) $liczby_do_usuniecia mamy wszystkie ID z tabeli `users`.
Pozostało nam usunąć te ID z tablicy $tablica_z_liczbami:

  1. for($i=0;$i<=count($tablica_z_liczbami); $i++)
  2. {
  3. if ( in_array($i, $liczby_do_usuniecia) )
  4. {
  5. if ( in_array($i, $tablica_z_liczbami)
  6. {
  7. unset($tablica_z_liczbami[$i];
  8. }
  9. }
  10. }
  11. print_r($tablica_z_liczbami); // powinno wyprintować wszystkie liczby z przedziału 0-9000 poza IDekami wyciągnietymi z bazy
Go to the top of the page
+Quote Post
S3baso
post 16.03.2013, 12:20:12
Post #7





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 16.07.2010

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


Hmm, bardziej chodzilo mi o liste rozwijalna czyli zapetlilem <option>xxx</option> do np. 2000 razy z roznymi liczbami, zaraz pokombinuje i zobacze czy to zda egzamin, i tak dziekuje za wlozenie w to serca biggrin.gif

To nie zda egzaminu, bo w moim przypadku w liscie rozwijalnej jest okolo 2 tysiecy elementow, petla to 3 linijki a nie 2 tysiace wpisow, z petli chce wyciagnac dane liczby, a jak wyciagnac z mysqla 4 liczby lub wiecej w zaleznosci od tego ile ich tam jest, do tego potrzebuje petli, ktora zaleznie od tego ile jest elementow wyciagnie albo 2 albo 20 liczb, tylko jak te 20 liczb (u mnie sa to numery portow) wyciagnac z tej listy rozwijalnej?

ok, namotałem to dam przykład, zebyscie mnie zrozumieli, lista rozwijalna html :

  1. <select name="port">
  2. <?php
  3. $porty=7000;
  4. $porty_koniec=9000;
  5. while ($porty != $porty_koniec + 1)
  6. {
  7. echo "<option>".$porty."</option>";
  8. ++$porty;
  9. }
  10. ?>
  11. </select>


Wyswietla w liscie liczby od 7000 do 9000, macie tu przyklad to tak wyglada: http://24shoutcast.pl/test.php i jak z tej listy liczb od 7000 do 9000 wyciagnac liczby pobrane z bazy np. 8130, 8035 itd.
Go to the top of the page
+Quote Post
Michael2318
post 16.03.2013, 12:32:22
Post #8





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


  1. <select name="port">
  2. <?php
  3. $porty=7000;
  4. $porty_koniec=9000;
  5. while ($porty != $porty_koniec + 1)
  6. {
  7. echo "<option>".$porty."</option>";
  8. $tablica[$porty] = $porty;
  9. ++$porty;
  10. }
  11. ?>
  12. </select>
  13. <?php
  14. $sql = "SELECT id FROM `jakas_tabela`";
  15. if ( !($result = mysql_query($sql)) )
  16. {
  17. die('error in sql<br>'.mysql_error());
  18. }
  19. while($row=mysql_fetch_assoc($result))
  20. {
  21. if ( in_array($row['id'], $tablica)
  22. {
  23. unset($tablica[$row['id']);
  24. }
  25. }
  26. print_r($tablica);


Ten post edytował Michael2318 16.03.2013, 12:33:51
Go to the top of the page
+Quote Post
PrinceOfPersia
post 16.03.2013, 13:16:09
Post #9





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


Cytat
Hmm, bardziej chodzilo mi o liste rozwijalna czyli zapetlilem <option>xxx</option> do np. 2000 razy z roznymi liczbami

znowu... nadgorliwi ludzie wink.gif (odnośnie innego tematu, gdzie też bardzo na podobny i zacny pomysł ktoś wpadł sprawdzania hurtem milionów numerów gadu-gadu czy są botami i wrzucania tego do pliku).

A czy nie możesz po prostu dać <input type="text" /> i dopiero jak ktoś wprowadzi numer portu, to to sprawdzić ten jeden konkretny numer?

Ten post edytował PrinceOfPersia 16.03.2013, 13:16:37


--------------------
Go to the top of the page
+Quote Post
S3baso
post 16.03.2013, 13:41:43
Post #10





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 16.07.2010

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


Gdybym mógł tak zrobić to zrobiłbym to dawno i sam, bo to nie problem, z tym jest gorzej...

Michael, dziekuje za Twoj kod wszystko pieknie dziala, bylo pare bledow, ale mam teraz kolejny problem, wyrzuca te porty, ale zostawia puste pole, jak zrobic by skrypt, znaczy petla while przeskoczyla jakby to puste miejsce, bo mam narazie http://24shoutcast.pl/test.php i zobacz np. w miejscu gdzie powinno byc 8002 jest puste pole, jest juz lepiej ale jak calkiem wyrzucic to nawet puste miejsce i po 8001 od razu 8003 ?
Go to the top of the page
+Quote Post
Michael2318
post 16.03.2013, 13:48:37
Post #11





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Załącz mi obecny kod, będzie mi łatwiej, a zarazem też Tobie będzie prościej bo nie będziesz musiał podpinać moich wypocin pod swój kod wink.gif
Go to the top of the page
+Quote Post
S3baso
post 16.03.2013, 13:50:02
Post #12





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 16.07.2010

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


Sie nie zdziw, to jest syf jakich malo, ale Twoj kod nie dzialal, wiec zrobilem to na 3 petle hahah :

  1. <?php
  2. require "config.php";
  3. connection();
  4. $porty=7000;
  5. $porty_koniec=9000;
  6. while ($porty != $porty_koniec + 1)
  7. {
  8. $tablica[$porty] = $porty;
  9. ++$porty;
  10. }
  11.  
  12. $sql = "SELECT `port` FROM `users`";
  13. if ( !($result = mysql_query($sql)) )
  14. {
  15. die('error in sql');
  16. }
  17. while($row=mysql_fetch_assoc($result))
  18. {
  19. if (in_array($row['port'],$tablica))
  20. {
  21. unset($tablica[$row['port']]);
  22. }
  23. }
  24. //print_r($tablica);
  25. //echo $tablica[8002];
  26. ?>
  27.  
  28. <select name="port">
  29. <?php
  30. $j=7000;
  31. $jestes=9000;
  32. while ($j != $jestes + 1)
  33. {
  34. if (in_array($row['port'],$tablica))
  35. continue;
  36.  
  37. echo "<option>".$tablica[$j]."</option>";
  38. ++$j;
  39. }
  40. ?>
  41. </select>
Go to the top of the page
+Quote Post
Michael2318
post 16.03.2013, 13:58:11
Post #13





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Nie będę ukrywał, że teraz to mało z tego kodu rozumiem, ale takie niezbyt wyszukane rozwiązanie:

  1. while ($j != $jestes + 1)
  2. {
  3. if (in_array($row['port'],$tablica))
  4. continue;
  5.  
  6. if ( $tablica[$j] !== '' )
  7. {
  8. echo "<option>".$tablica[$j]."</option>";
  9. }
  10. ++$j;
  11. }


Chodzi o warunek:

  1. if ( $tablica[$j] !== '' )
  2. {
  3. echo "<option>".$tablica[$j]."</option>";
  4. }


który spowoduje, że doda Ci option'a tylko wtedy, gdy zmienna z tablicą nie będzie pusta. Może ktoś da Ci lepsze rozwiązanie.
Go to the top of the page
+Quote Post
S3baso
post 16.03.2013, 14:02:06
Post #14





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 16.07.2010

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


Ok, dziekuje uprzejmie, zrobilem taki syf poniewaz to co Ty dales, nie dzialalo bo nie robilo optionow jak nalezy, nie mam pojecia dlaczego, teraz jest ok i nie if ( $tablica[$j] !== '' ) tylko if ( $tablica[$j] != '' ), dziekuje, jezeli chcesz jeszcze pomoc uporzadkowac ten kod bylbym wdzieczny

#EDIT

Twoj kod bez zmian z malymi poprawkami bo zapominales np. ) lub ] wyglada tak:

http://24shoutcast.pl/test2.php

Ten post edytował S3baso 16.03.2013, 14:05:08
Go to the top of the page
+Quote Post
Michael2318
post 16.03.2013, 14:12:23
Post #15





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Cytat
i nie if ( $tablica[$j] !== '' ) tylko if ( $tablica[$j] != '' )


Pierwsze słysze, aby to miało jakiekolwiek znaczenie... wink.gif

Co do ogarnięcia kodu to niestety nadal do końca nie wiem co to w ogóle jest, ale 3 pętle to przesada, idealnie byłoby wymyślić jakiś nowy sposób/algorytm, może zaangazować bazę danych, tak aby maksymalnie to uprosicić i odciążyć serwer.
Tak jak pisałem - nie wiem do czego Ci to jest potrzebne,więc ode mnie tyle, spróbuj wymyślić coś sam i ewentualnie pytaj tutaj na forum smile.gif
Go to the top of the page
+Quote Post
S3baso
post 16.03.2013, 14:17:19
Post #16





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 16.07.2010

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


Ok rozumiem, tak zrobie i tak dziekuje za pomoc, no ja tez pierwszy raz slysze, ale !== nie dziala a jak zmienilem na != to juz tak, sam wymyslilem wlasnie sposob z 3 petlami(ktory jest beznadziejny) ale pomysle jeszcze nad tym i najwyzej podziele sie swoim rozwiazaniem biggrin.gif Jeszcze raz dziekuje

Ten post edytował S3baso 16.03.2013, 14:17:40
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:59