Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Co oznacza ten zapis ?
Wolfie
post
Post #1





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

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


Witam , mam sobie tabele w bazie danych ktora wyglada nastepujaco :

+-----------+-----------------+----------------+-------------------+
| people_id | people_fullname | people_isactor | people_isdirector |
+-----------+-----------------+----------------+-------------------+
| 1 | Jim Carrey | 1 | 0 |
| 2 | Tom Shadyac | 0 | 1 |
| 3 | Lawrence Kasdan | 0 | 0 |
| 4 | Kevin Kline | 1 | 0 |
| 5 | Ron Livingston | 0 | 0 |
| 6 | Mike Judge | 0 | 0 |
+-----------+-----------------+----------------+-------------------+

Nastepnie istnieje kod php ktorego troszke nie rozumiem:

  1. <?php
  2. $peoplesql = "SELECT * FROM people";
  3.    
  4.    $result = mysql_query($peoplesql) or die ("Niepoprawne zapytanie: ". mysql_error());
  5.    
  6.    while($row = mysql_fetch_array($result)) {
  7.        $people[$row['people_id']] = $row['people_fullname'];
  8. ?>


Dokładnie chodzi o tą linijke :

  1. <?php
  2. $people[$row['people_id']] = $row['people_fullname'];
  3. ?>


Nie rozumiem zapisu po prawej stronie znaku równości
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Jest to przypisanie wartości kolumny people_fullname dla bieżącego rekordu.
Go to the top of the page
+Quote Post
Wolfie
post
Post #3





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

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


To ze jest to przypisanie kolumny to dokladnie widac , ale nie rozumiem zapisu $people[$row['people_id']], prosilbym o wyjasnienei tego zapisu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , dlaczego przed wszystkim jest jeszcze $people ?
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Bo to nowa tablica. Poczytaj o tablicach asocjacyjnych, wszystko jest w dokumentacji. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
#luq
post
Post #5





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


erix w tym przypadku nie jest to chyba tablica asocjacyjna, people_id w bazie jest typu integer.

Otrzymujemy coś takiego
  1. <?php
  2. $people[1] = 'Jim Carrey';
  3. $people[2] = 'Tom Shadyac';
  4. [...]
  5. ?>


natomiast nie tak:
  1. <?php
  2. $people['1'] = 'Jim Carrey';
  3.  $people['2'] = 'Tom Shadyac';
  4. [...]
  5. ?>


W każdym bądź razie, dla wyjaśnienia. Wolfie w PHP tablice można tworzyć niejawnie, tzn, jeśli nie istnieje tablica $people, a później jest kawałek kodu:
  1. <?php
  2. $people[0] = 'coś tam';
  3. ?>

to najpierw jest tworzona tablica $people, a następnie do 0 indeksu jest dodawana wartość 'coś tam'

W takim przypadku:
  1. <?php
  2. $people = array();
  3.  $people[0] = 'coś tam';
  4. ?>

Najpierw jawnie jest tworzona tablica, następnie jest do wpisywane 'coś tam'


Na koniec jeszcze dodam, że tworzenie niejawne tablicy jest niewskazane. Dlaczego? Jeśli nie maiłabyś w bazie żadnego rekordu pasującego do zapytania to w przypadku wywołania później np:
  1. <?php
  2. sort( $people );
  3. ?>

Wywali błąd.
$people nie jest brana w kontekście tablicy a sort wymaga jako pierwszego argumentu tablicy. Dlatego polecam pisać, np w Twoim przypadku:
  1. <?php
  2. $people = array();
  3.    while($row = mysql_fetch_array($result)) {
  4.         $people[$row['people_id']] = $row['people_fullname'];
  5.    }
  6. ?>


Spory wywód ale mam nadzieje, że na coś się przyda (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
erix w tym przypadku nie jest to chyba tablica asocjacyjna, people_id w bazie jest typu integer.

Ale równie dobrze może nim nie być. Jakiekolwiek ustawianie "nienaturalne" kluczy jest asocjacją, czyż nie? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) Byłby skalar, gdyby klucz był ustawiany automatycznie, a w przypadku nieciągłości identyfikatora tak się w tym przypadku nie stanie.
Go to the top of the page
+Quote Post
#luq
post
Post #7





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


To znaczy, że jeśli ominiemy co najmniej jeden indeks, to PHP definiuje tablice jako asocjacyjna? Jeśli tak to nie wiedziałem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nie, mam na myśli sztywne ustawianie kluczy.

To jest "nie-asocjacyjna":
  1. <?php
  2. $arr = array();
  3. $arr[] = 'asdasd';
  4. $arr[] = 'afrgdfg';
  5. ?>
Go to the top of the page
+Quote Post
#luq
post
Post #9





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


No tak to jest oczywiste.
Po prostu nie rozumiem dlaczego, dla takiej tablicy:
  1. <?php
  2. $arr = array();
  3.  
  4.    // brak indeksu zerowego
  5.    $arr[1] = 'a';
  6.    $arr[2] = 'b';
  7.    $arr[3] = 'c';
  8.    $arr[4] = 'd';
  9. ?>

wspominasz o tablicach asocjacyjnych (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




W sumie, to na jedno wychodzi. Ale sam fakt, że dla każdej wartości ustawiasz konkretny klucz, to - o ile się nie mylę - jest asocjacją.
Go to the top of the page
+Quote Post
#luq
post
Post #11





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Szczerze to nie wiem jak jest, bo w sprawy samego silnika PHP się nie zagłębiałem, ale imho, było by to bez sensu.

Według moich informacji, tablice asocjacyjne to tablice kluczowane nie indeksowane: indeks = integer, klucz = string (oraz reszta typów prostych poza int, które zostają rzutowane na stringa) i nie ma tutaj różnicy czy tablica jest wypełniana ręcznie indeks po indeksie czy od razu w czasie deklaracji.

Wg. mnie nawet to nie jest tablicą asocjacyjną:
  1. <?php
  2. $arr = array(
  3.        '0' => 'bla',
  4.        '1' = 'bla2'
  5.    );
  6. ?>


Podany string uda się kompletnie zrzutować na integera, więc poprawnie można się odwoływać do:
  1. <?php
  2. $arr[0]; // a nie trzeba koniecznie $arr['0']
  3. ?>


Szczerze to nie warto się dochodzić (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Jak to działa tak to działa, byle by robić tak, żeby błędów nie wywalało :]
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: 28.09.2025 - 03:11