Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Nieoptymalna pętla (zabija skrypt), jak inaczej?
in5ane
post 21.11.2013, 19:35:42
Post #1





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Cześć. Mam problem z pętlami, które przy dużej ilości danych zabijają skrypt. Może znajdziecie lepszy pomysł na rozwiązanie mojego problemu. Na tą chwilę mam coś takiego:
  1. <?php
  2. $tab = array(
  3. 0 => array('ilosc' => 1, 'nazwa' => 'jedynka 1'),
  4. 1 => array('ilosc' => 2, 'nazwa' => 'dwojka 1'),
  5. 2 => array('ilosc' => 3, 'nazwa' => 'trojka 1'),
  6. 3 => array('ilosc' => 2, 'nazwa' => 'dwojka 2'),
  7. 4 => array('ilosc' => 2, 'nazwa' => 'dwojka 3'),
  8. 5 => array('ilosc' => 1, 'nazwa' => 'jedynka 2'),
  9. 6 => array('ilosc' => 1, 'nazwa' => 'jedynka 3'),
  10. 7 => array('ilosc' => 3, 'nazwa' => 'trojka 2'),
  11. 8 => array('ilosc' => 2, 'nazwa' => 'dwojka 4'),
  12. 9 => array('ilosc' => 1, 'nazwa' => 'jedynka 4')
  13. );
  14.  
  15. $ilosc = array(0 => 1, 1, 2, 2, 3);
  16.  
  17. foreach ($tab as $row1)
  18. {
  19. if ($row1['ilosc'] == $ilosc[0])
  20. {
  21. foreach ($tab as $row2)
  22. {
  23. if ($row2['ilosc'] == $ilosc[1])
  24. {
  25. foreach ($tab as $row3)
  26. {
  27. if ($row3['ilosc'] == $ilosc[2])
  28. {
  29. foreach ($tab as $row4)
  30. {
  31. if ($row4['ilosc'] == $ilosc[3])
  32. {
  33. foreach ($tab as $row5)
  34. {
  35. if ($row5['ilosc'] == $ilosc[4])
  36. {
  37. $znalezione[] = $row1['nazwa'].' '.$row2['nazwa'].' '.$row3['nazwa'].' '.$row4['nazwa'].' '.$row5['nazwa'];
  38. }
  39. }
  40. }
  41. }
  42. }
  43. }
  44. }
  45. }
  46. }
  47. }
  48.  
  49. /**
  50.  * Z tego przykładu, gdy dałem echo count($znalezione); to miałem aż 512 kombinacji.
  51.  *
  52.  * Dodanie tylko jednej wartości do $tab (np. 10 => array('ilosc' => 1, 'nazwa' => 'jedynka 5')) zwiększa ilość kombinacji z 512 do 800.
  53.  */

A wiec chodzi o to, żeby dopasowało idealnie ze sobą 5 różnych wpisów. Wszystko było OK, gdy $tab miało około 20-30 wpisów. Ale przy 2500 wpisów skrypt poległ. Czy macie jakieś pomysł na to? A może macie przy okazji pomysł, jak to zrobić, żeby było to uniwersalne np. zależne od zmiennej $count, i np. jakby jej wartość była równa 5 to by się zagnieżdżało 5 razy, a jakby było równe 10, to zagnieżdżało się 10 razy (czyli dopasowywało by ze sobą 10 różnych wpisów). Ale co do uniwersalności nie musi być. Ważne, by skrypt był optymalny. Ważne, że musi mi wszystkie możliwe kombinacje dać. Z góry dziękuję za pomoc smile.gif

Ten post edytował in5ane 21.11.2013, 20:26:06


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post

Posty w temacie


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: 31.07.2025 - 10:35