Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Co oznacza ten zapis ?
Forum PHP.pl > Forum > Przedszkole
Wolfie
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
erix
Jest to przypisanie wartości kolumny people_fullname dla bieżącego rekordu.
Wolfie
To ze jest to przypisanie kolumny to dokladnie widac , ale nie rozumiem zapisu $people[$row['people_id']], prosilbym o wyjasnienei tego zapisu smile.gif, dlaczego przed wszystkim jest jeszcze $people ?
erix
Bo to nowa tablica. Poczytaj o tablicach asocjacyjnych, wszystko jest w dokumentacji. winksmiley.jpg
#luq
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 winksmiley.jpg
erix
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? 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.
#luq
To znaczy, że jeśli ominiemy co najmniej jeden indeks, to PHP definiuje tablice jako asocjacyjna? Jeśli tak to nie wiedziałem winksmiley.jpg
erix
Nie, mam na myśli sztywne ustawianie kluczy.

To jest "nie-asocjacyjna":
  1. <?php
  2. $arr = array();
  3. $arr[] = 'asdasd';
  4. $arr[] = 'afrgdfg';
  5. ?>
#luq
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 winksmiley.jpg
erix
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ą.
#luq
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ć winksmiley.jpg Jak to działa tak to działa, byle by robić tak, żeby błędów nie wywalało :]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.