Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Funkcja rekurencyjna tworząca tablice wielopoziomową.
Durkane
post
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ę (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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
 
Start new topic
Odpowiedzi (1 - 17)
kapslokk
post
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
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.
(IMG:http://wrzucaj.net/images/2015/08/07/x.png)

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 (IMG:style_emoticons/default/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
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 (IMG:style_emoticons/default/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
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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/tongue.gif)

Ten post edytował Durkane 7.08.2015, 10:10:47
Go to the top of the page
+Quote Post
kapslokk
post
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 (IMG:style_emoticons/default/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
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 (IMG:style_emoticons/default/biggrin.gif) mam nadzieję, że nie skorzystam z tego co napisałeś(IMG:style_emoticons/default/tongue.gif)

Bardzo dziękuję za pomoc !:P Udało się to wykonać (IMG:style_emoticons/default/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) } } } (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
kapslokk
post
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 (IMG:style_emoticons/default/smile.gif) Mozesz zainstalowac (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Durkane
post
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 (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
kapslokk
post
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 (IMG:style_emoticons/default/smile.gif) Jaki masz system i co to za poradnik?
Go to the top of the page
+Quote Post
Durkane
post
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
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
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
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 (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Durkane
post
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 (IMG:style_emoticons/default/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
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 (IMG:style_emoticons/default/biggrin.gif) .
Go to the top of the page
+Quote Post
Durkane
post
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 (IMG:style_emoticons/default/smile.gif) Dzięki wielkie za pomoc.
Go to the top of the page
+Quote Post
redeemer
post
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) } } } (IMG:style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 19:30