Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Funkcja rekurencyjna tworząca tablice wielopoziomową.
Durkane
post 7.08.2015, 09:17:03
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Witam.
Otóż mam taki problem, chce zrobić kod, który będzie tworzył tablicę np. damy liczbę 2 i zrobi tablicę takiego rodzaju

1
...1
...2

2
...1
...2
itd itd jak podamy inne liczby. TO się rozszerzy o więcej poziomów.

Mam taki kod :
  1. <?php
  2.  
  3. $Number = 4;
  4.  
  5. function tablica($Number, $Index = '')
  6. {
  7. foreach ($Number as $key=>$value)
  8. {
  9. if(is_array($value))
  10. {
  11. tablica($value, $index .= $key);
  12. $index = substr($index, 0, -1);
  13. }
  14. else
  15. {
  16. echo $index.$key.':'.$value.'<br />';
  17. }
  18. }
  19. }
  20.  
  21. tablica($Number, $Index='');
  22. ?>


Przejrzałem chyba z ~20 tematów o funkcji rekurencyjnej i tablicy, ale żaden mi nie rozjaśnił nic w głowie : / Czy jest ktoś kto może to wyjaśnić w miarę sensownie żebym załapał jak mam napisać to ? Z góry dziękuję smile.gif I pytanie co piszę źle w foreach, że za każdym razem jak tego użyję to wyskakuje mi Warning: Invalid argument supplied for foreach() in C:\WebServ\httpd-users\cos\tablica wielopoziomowa.php on line questionmark.gif Bo według mnie są dobre argumenty podane.

Ten post edytował Durkane 7.08.2015, 09:18:53
Go to the top of the page
+Quote Post
kapslokk
post 7.08.2015, 09:33:36
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Rozpisz ta tablice z poziomami dla wiekszej liczby np 4, bo nie czaje co chcesz osiagnac. A foreach Ci wywala blad, bo nie przekazujesz do niego tablicy, tylko liczbe 4 w pierwszym wywolaniu.
Go to the top of the page
+Quote Post
Durkane
post 7.08.2015, 09:52:18
Post #3





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Właśnie chce zrobić, że przez tą liczbę 4 tworzą się 4 poziomy tablicy.


W skrócie to dla 4 masz 4 liczby dla każdej z tej 4 dodaje 4 liczby i do kolejnej 4 dodaje kolejne 4 itd biggrin.gif

Może tak dajemy do tablicy 3 liczby (1,2,3). Dla tych 3 liczb dodajemy (dla każdej osobno) kolejne 3 liczby (1,2,3) i dla tych 3 kolejne 3.

Wtedy mamy :
1
..1
......1
......2
......3
..2
......1
......2
......3
..3
......1
......2
......3
2
..1
......1
......2
......3
..2
......1
......2
......3
..3
......1
......2
......3
3
..1
......1
......2
......3
..2
......1
......2
......3
..3
......1
......2
......3


Ten post edytował Durkane 7.08.2015, 10:08:21
Go to the top of the page
+Quote Post
kapslokk
post 7.08.2015, 10:06:32
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Ok, mamy klucze. Wartosci maja byc jakies konkretne? W ogole po co cos takiego? W jakims konkretnym celu czy po prostu wymysliles sobie taki przyklad zeby pocwiczyc rekurencje?

Bah nie ważne, Juz wiem co ma byc wartoscia biggrin.gif Nie zaczailem.

Ten post edytował kapslokk 7.08.2015, 10:09:31
Go to the top of the page
+Quote Post
Durkane
post 7.08.2015, 10:09:34
Post #5





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Jest to zadanie od znajomego programisty, aby poćwiczyć funkcje rekurencyjne smile.gif Ogólnie powiedział, że wartość ze zmiennej może być wprowadzana. Czyli byle jakie wartości.
A i powiedział żeby później użyć var_dump do wypisania tego tongue.gif

Ten post edytował Durkane 7.08.2015, 10:10:47
Go to the top of the page
+Quote Post
kapslokk
post 7.08.2015, 10:18:57
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


W takim razie zrob tak:
funkcja niech przyjmuje dwa parametry. jeden to ile poziomow zagniezdzen ma robic a drugi to na ktorym jestes aktualnie. Potem w forze od 0 do ilosci zagniezdzen-1 do tablicy przypisujesz

jesli poziom > 0 wynik dzialania tej funkcji dla poziomu mniejszego o 1 a jezeli == 0 to wartosc licznika z fora i. I tyle.

Mniej wiecej tak smile.gif

Jak sobie nie będziesz radził to obczaj tutaj:
  1. function test($level, $max = null)
  2. {
  3. if ($max == null) {
  4. $max = $level;
  5. }
  6. $array = array();
  7. for ($i = 0; $i < $max; $i++) {
  8. if ($level > 0) {
  9. $array[$i] = test($level - 1,$max);
  10. }else{
  11. $array[$i] = $i;
  12. }
  13. }
  14. return $array;
  15. }


Ten post edytował Kshyhoo 7.08.2015, 16:20:01
Powód edycji: [Kshyhoo]: bb-code
Go to the top of the page
+Quote Post
Durkane
post 7.08.2015, 10:37:04
Post #7





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Jestem po nocnej zmianie to ciężko z myśleniem,ale już powoli łapie co miałeś na myśli biggrin.gif mam nadzieję, że nie skorzystam z tego co napisałeśtongue.gif

Bardzo dziękuję za pomoc !:P Udało się to wykonać smile.gif A jeszcze mam pytanie, czy da się wyświetlać to w kolumnie tak jak ja rozpisywałem ? Czy tylko w taki sposób array(2) { [0]=> array(2) { [0]=> array(2) { [0]=> int(0) [1]=> int(1) } [1]=> array(2) { [0]=> int(0) [1]=> int(1) } } [1]=> array(2) { [0]=> array(2) { [0]=> int(0) [1]=> int(1) } [1]=> array(2) { [0]=> int(0) [1]=> int(1) } } } questionmark.gif
Go to the top of the page
+Quote Post
kapslokk
post 7.08.2015, 10:41:29
Post #8





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


xdebug ladnie wyswietla dumpy w kolumnach smile.gif Mozesz zainstalowac smile.gif
Go to the top of the page
+Quote Post
Durkane
post 7.08.2015, 10:55:36
Post #9





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Hm... zrobiłem według poradnika instalacji i nic nie zrobiło się z wyświetlaniem tongue.gif
Go to the top of the page
+Quote Post
kapslokk
post 7.08.2015, 11:05:48
Post #10





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


W takim razie zrobiłeś coś nie tak smile.gif Jaki masz system i co to za poradnik?
Go to the top of the page
+Quote Post
Durkane
post 7.08.2015, 11:10:38
Post #11





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Instalacja XDebug ten poradnik.
Windows 8 64 bit. Używam WebServ jak coś.
Go to the top of the page
+Quote Post
kapslokk
post 7.08.2015, 11:15:07
Post #12





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Na pewno podałeś dobre ścieżki? Logi coś pokazują?
Go to the top of the page
+Quote Post
Durkane
post 7.08.2015, 11:17:56
Post #13





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Failed loading c:/WebServ/php/ext/php_xdebug-2.3.3-5.4-vc9-nts-x86_64.dll

Jedyny problem to taki, że nie posiadam takiej linijki w php.ini ";extension=php_zip.dll" : /
Więc dałem tak
extension=php_xsl.dll
zend_extension = "c:/WebServ/php/ext/php_xdebug-2.3.3-5.4-vc9-nts-x86_64.dll"

Dobra zmieniłem z małego c na duże C i nie ma już tego Failed loading, ale nadal nic mi się nie zmieniło w wyświetlaniu tablicy.

Ten post edytował Durkane 7.08.2015, 11:21:20
Go to the top of the page
+Quote Post
kapslokk
post 7.08.2015, 11:21:12
Post #14





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Jeżeli plik z biblioteką jest w tym katalogu, to nie mam pomysłu. Ewentualnie spróbuj użyć starszej wersji. Albo linuxa biggrin.gif
Go to the top of the page
+Quote Post
Durkane
post 7.08.2015, 11:22:01
Post #15





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


A trzeba mieć do tego zenda zainstalowanego ? Bo ja nie mam go tongue.gif To jakoś się włącza czy samo po podaniu ścieżki już działa i zmienia wszystko?

LOG

Apache server shutdown initiated...
Child 7052: Child process is running
[Fri Aug 07 12:20:05 2015] [notice] Child 7052: Acquired the start mutex.
[Fri Aug 07 12:20:05 2015] [notice] Child 7052: Starting 64 worker threads.
[Fri Aug 07 12:20:05 2015] [notice] Child 7052: Starting thread to listen on port 80.
[Fri Aug 07 12:20:05 2015] [notice] Child 7052: Starting thread to listen on port 80.
[Fri Aug 07 12:22:31 2015] [notice] Parent: Received shutdown signal -- Shutting down the server.
[Fri Aug 07 12:22:31 2015] [notice] Child 7052: Exit event signaled. Child process is ending.
[Fri Aug 07 12:22:32 2015] [notice] Child 7052: Released the start mutex
[Fri Aug 07 12:22:33 2015] [notice] Child 7052: All worker threads have exited.
[Fri Aug 07 12:22:33 2015] [notice] Child 7052: Child process is exiting
[Fri Aug 07 12:22:33 2015] [notice] Parent: Child process exited successfully.
[Fri Aug 07 12:22:33 2015] [notice] Apache/2.2.22 (Win32) PHP/5.4.10 configured -- resuming normal operations
[Fri Aug 07 12:22:33 2015] [notice] Server built: Feb 13 2012 12:13:59
[Fri Aug 07 12:22:33 2015] [notice] Parent: Created child process 2708
[Fri Aug 07 12:22:33 2015] [notice] Child 2708: Child process is running
[Fri Aug 07 12:22:33 2015] [notice] Child 2708: Acquired the start mutex.
[Fri Aug 07 12:22:33 2015] [notice] Child 2708: Starting 64 worker threads.
[Fri Aug 07 12:22:33 2015] [notice] Child 2708: Starting thread to listen on port 80.
[Fri Aug 07 12:22:33 2015] [notice] Child 2708: Starting thread to listen on port 80.

Ten post edytował Durkane 7.08.2015, 11:23:06
Go to the top of the page
+Quote Post
kapslokk
post 7.08.2015, 11:26:29
Post #16





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Samo dodanie modułu do php.ini powinno wystarczyć. Nic więcej nie jest potrzebne - chyba biggrin.gif.
Go to the top of the page
+Quote Post
Durkane
post 7.08.2015, 11:32:17
Post #17





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Dobra musi zostać tak jak jest bo nic, nie pomaga na tego xDebuga smile.gif Dzięki wielkie za pomoc.
Go to the top of the page
+Quote Post
redeemer
post 7.08.2015, 12:19:20
Post #18





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Cytat(Durkane @ 7.08.2015, 11:37:04 ) *
A jeszcze mam pytanie, czy da się wyświetlać to w kolumnie tak jak ja rozpisywałem ? Czy tylko w taki sposób array(2) { [0]=> array(2) { [0]=> array(2) { [0]=> int(0) [1]=> int(1) } [1]=> array(2) { [0]=> int(0) [1]=> int(1) } } [1]=> array(2) { [0]=> array(2) { [0]=> int(0) [1]=> int(1) } [1]=> array(2) { [0]=> int(0) [1]=> int(1) } } } questionmark.gif
Przeglądarki nie renderują m.in. znaków nowej linii w HTML, dlatego jak spojrzysz w źródło strony zobaczysz to lepiej sformatowane.


--------------------
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 - 01:13