Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php+mysql] max();
-Sajam-
post 30.08.2007, 15:39:49
Post #1





Goście







Mam następujący problem...
Dlaczego funkcja max nie działa w tym przykładzie:

  1. <?php
  2. baza_polacz();
  3.  
  4. $w = mysql_query("SELECT * FROM menu");
  5. while ( $r = mysql_fetch_array($w)){
  6. $m = max($r['poz']);
  7. print $m;
  8. }
  9. ?>


Pole poz to pozycja w menu (1, 2, 3, 4, 5...) typ: tinyint.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Hazel
post 30.08.2007, 15:53:33
Post #2





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


max()" title="Zobacz w manualu PHP" target="_manual
Czytałeś, jakie argumenty ta funkcja przyjmuje?

Ten post edytował Hazel 30.08.2007, 15:54:17


--------------------
Go to the top of the page
+Quote Post
-Sajam-
post 30.08.2007, 15:54:39
Post #3





Goście







Tak wiem widziałem i co?..
Może napisałbyś co mam źle?
Go to the top of the page
+Quote Post
qooxdoo
post 30.08.2007, 15:55:59
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 30.08.2007

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


To, że funkja max() pobiera przynajmniej 2 argumenty a ty za każdym wykonaniem pętli podajesz inny, więc do funkcji przekazujesz tylko jeden argument.


--------------------
Sygnaturka usunięta ze względu na złamanie regulaminu forum (Sabistik)
Go to the top of the page
+Quote Post
-Sajam-
post 30.08.2007, 15:56:05
Post #5





Goście







Nie no.. druga odpowiedź dobiła mnie jeszcze bardziej blinksmiley.gif
Go to the top of the page
+Quote Post
qooxdoo
post 30.08.2007, 15:57:15
Post #6





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 30.08.2007

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


Najpierw wczytaj wszystkie rekordy 'poz' do tablicy, a potem wywołaj funkcję max() [tylko jeden raz a nie w pętli]


--------------------
Sygnaturka usunięta ze względu na złamanie regulaminu forum (Sabistik)
Go to the top of the page
+Quote Post
Hazel
post 30.08.2007, 15:59:10
Post #7





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


Cytat(qooxdoo @ 30.08.2007, 16:55:59 ) *
To, że funkja max() pobiera przynajmniej 2 argumenty

To też nie do końca prawda, max() może pobierać również tablicę... Ale to nieważne, bo w tym przypadku nie pobiera żadnej tablicy, a zmienną, która z każdą iteracją while jest inna, i nie ma szans na zrobienie czegokolwiek... Logiki trochę by się przydało dry.gif


--------------------
Go to the top of the page
+Quote Post
qooxdoo
post 30.08.2007, 16:09:04
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 30.08.2007

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


No to mówię, wczytaj wszystkie rekordy do tablicy. Pętla while będzie ci potrzebna wyłącznie do tego. A wynik wyświetlisz tak:
  1. <?phpecho max($tablica_poz);?>


działający kod:

  1. <?
  2. phpbaza_polacz();
  3. $w = mysql_query("SELECT * FROM menu");
  4. while ( $r = mysql_fetch_array($w)){
  5. $tablica[$i++]=$r['poz']
  6. }
  7. $m = max($tablica);
  8. print $m;?>


Ten post edytował qooxdoo 30.08.2007, 16:14:16


--------------------
Sygnaturka usunięta ze względu na złamanie regulaminu forum (Sabistik)
Go to the top of the page
+Quote Post
drPayton
post 31.08.2007, 12:13:00
Post #9





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


@qooxdoo:
Działający, ale niepoprawny. Co ma oznaczać:
  1. <?php
  2. $tablica[$i++]
  3. ?>

? Co to za inkrementowanie $i, które nie zostało wcześniej określone?
Poza tym wystarczy:
  1. <?php
  2. $tablica[]
  3. ?>

Zrób
  1. <?php
  2. print_r($tablica);
  3. ?>

i zobacz efekt swojego kodu winksmiley.jpg

Ten post edytował drPayton 31.08.2007, 12:13:16
Go to the top of the page
+Quote Post
qooxdoo
post 31.08.2007, 16:01:27
Post #10





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 30.08.2007

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


Przepraszam, dopiero zaczynam z PHP. Wydawało mi się, że zmienna $i automatycznie przyjmie typ integer. Ale wystarczy przed pętlą dać $i=0
A skąd interpreter będzie wiedział, jaki wstawić index w wyrażeniu:
Cytat(drPayton @ 31.08.2007, 13:13:00 ) *
Co to za inkrementowanie $i, które nie zostało wcześniej określone?
Poza tym wystarczy:
  1. <?php
  2. $tablica[]
  3. ?>

?


--------------------
Sygnaturka usunięta ze względu na złamanie regulaminu forum (Sabistik)
Go to the top of the page
+Quote Post
drPayton
post 31.08.2007, 17:01:44
Post #11





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Cytat
Ale wystarczy przed pętlą dać $i=0

Otóż to. I dopiero wtedy będzie OK to co napisałeś.
Cytat
A skąd interpreter będzie wiedział, jaki wstawić index w wyrażeniu:
  1. <?php
  2. $tablica[]
  3. ?>

?

Automatycznie przyjmuje indeksowanie numeryczne poczynając od zera, lub od ostatniego indeksu numerycznego jeśli był zadeklarowany wcześniej, tzn:
  1. <?php
  2. $tablica[] = "foo"; // Ten element "przyjmie indeks numeryczny" 0
  3.  
  4. $tablica2 = array(0 => 'foo', 1 => 'bar');
  5. $tablica2[] = "foobar"; // Ten element "przyjmie indeks numeryczny" 2
  6. ?>


Ten post edytował drPayton 31.08.2007, 17:03:19
Go to the top of the page
+Quote Post
qooxdoo
post 31.08.2007, 19:58:53
Post #12





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 30.08.2007

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


sprytne winksmiley.jpg


--------------------
Sygnaturka usunięta ze względu na złamanie regulaminu forum (Sabistik)
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: 24.07.2025 - 23:04