Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak zrobić rekurencyjny foreach, rezultat w ostatniej pętli
radiopraca
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 7.02.2014

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


Jak napisać funkcję która robi foreach k-razy.
Przesyłam przykład z k = 4

  1. foreach ($aaa as $aa) {
  2. $newProducts = array_diff($products, $aa);
  3. $newProducts = array_values($newProducts);
  4. $bbb = go2($newProducts);
  5.  
  6. foreach ($bbb as $bb) {
  7. $newProducts2 = array_diff($newProducts, $bb);
  8. $newProducts2 = array_values($newProducts2);
  9. $ccc = go2($newProducts2);
  10.  
  11. foreach ($ccc as $cc) {
  12. $newProducts3 = array_diff($newProducts2, $cc);
  13. $newProducts3 = array_values($newProducts3);
  14.  
  15. $out[] = array(
  16. $aa,
  17. $bb,
  18. $cc,
  19. $newProducts3
  20. );
  21. }
  22. }
  23. }


Rekurencyjne FOR-y już kumam i sobie radze, ale tutaj cała akcja toczy się w ostatnim foreachu.
Walcze z tym już od rana, na razie mam tak, ale to nie działa, pomoze ktoś?


  1. function xxx($products, $partials, $i = 0, $part) {
  2.  
  3. if ($i < 1) {
  4. foreach ($partials as $part) {
  5. $newProducts = array_diff($products, $part);
  6. $newProducts = array_values($newProducts);
  7. $bbb = go2($newProducts);
  8.  
  9. $partial = array_megre($part, $bbb);
  10.  
  11. xxx($newProducts, $bbb, ++$i, $partial);
  12. }
  13. }
  14. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
radiopraca
post
Post #2





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 7.02.2014

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


Skomplikowana sprawa. Ogólnie chodzi o pewien skomplikowany algorytm zbudowany z kilku klocków. To jest ostatni klocek który jest mi potrzebny. Ogólnie chodzi o wygenerowanie wszystkich przypadków kupienia X produktów w Y sklepach.

Mamy 2 sklepy i 3 produkty które chcemy w nich kupić. Możemy to zrobić na 8 sposobów.
1. a,bc
2. b,ac
3. c,ab
4. ab,c
5. ac,b
6. bc,a
7. -,abc
8. abc, -

Potrzebuje funkcji która zwracałaby mi wszystkie przypadki w zależności od produktów i ilości sklepów.

Mam już coś takiego, ale ciągle nie działa poprawnie:

  1. function xxx($products, $partials, $i = 0, $max = 3, $party=array(), &$out=array()) {
  2.  
  3. if ($i < $max) {
  4. foreach ($partials as $part) {
  5. $newProducts = array_diff($products, $part);
  6. $newProducts = array_values($newProducts);
  7. $partial[] = $part;
  8.  
  9. if (count($partial) < $max-1) {
  10. $bbb = go2($newProducts);
  11. xxx($newProducts, $bbb, ++$i, $max, $partial, $out);
  12. }
  13.  
  14. if (count($partial) == $max-1) {
  15. $partial[] = $newProducts;
  16. $out[] = $partial;
  17. $partial = array();
  18. }
  19. }
  20. }
  21.  
  22. return $out;
  23. }


Ten post edytował radiopraca 10.02.2014, 21:56:30
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: 7.10.2025 - 19:42