Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Tworzenie tablicy z sql i odczyt
Forum PHP.pl > Forum > Przedszkole
harbii
Wiem że to pewnie proste ale w tablicach sie nie bawiłem zbytnio.

Wrzucam z sql do tabeli dane i dorzucam licznik
  1. $sql = "SELECT * FROM tabelka ";
  2. $w = mysql_query($sql);
  3. while($d = mysql_fetch_array($w))
  4. {
  5. $tre[][nr] = $d['nr'];
  6. $tre[][nazwa] = $d['nazwa'];
  7. $tre[][pozycja] = $tre[][pozycja] + 1;
  8. }


Chyba dobrze?

Jak to teraz posortować po zmiennej pozycja i wyświetlić pokolei?
sajegib
w tym momencie kazdy element tablicy $tre zawiera inną kolummnę z db, powinieneś zrobić tak:

dodaj inkrementator do pętli, i zrób to samo na zasadzie:

  1. $tre[$i]['nr'] = //cośtam
  2.  


Wtedy będziesz miał w $tre tablice zawierające wszystkie kolumny(zakładam, że taki efekt chcesz osiągnąć)


pozatym nie:

  1. $tre[][nazwa]

tylko
  1. $tre[]['nazwa']


a następnie:

http://lmgtfy.com/?q=sortowanie+tablic+php

a jeszcze lepiej - posortuj w SQL-u -> ORDER BY
harbii
Nie moge tego posortować w sql. Właśnie po to walcze z tą tabelą. Bo wniej dopiero ma sie posortować.
A jak to teraz wyciągnąć z tej tablicy i wyświetlić tak aby wyglądało to mniejwięcej tak:
pozycja nr nazwa
?
Turson
SELECT * FROM tabelka order by pozycja DESC

żeby wyświetlić - zwykłe echo
harbii
wiem jak się sortuje w sql. ale nie moge na tym etapie sortować. muszę wciągąć dane z sql do tablicy dodając tam liczbę porządkową i dopiero z z tej tablicy wyświtlić wyniki posortowane wg liczby porządkowej.
sajegib
usort
harbii
Nie czaje tego.
Pierwszy lepszy przykład z manuala. Dlaczego nie działa?

  1. <?php
  2. $array[0] = array('key_a' => 'z', 'key_b' => 'c');
  3. $array[1] = array('key_a' => 'x', 'key_b' => 'b');
  4. $array[2] = array('key_a' => 'y', 'key_b' => 'a');
  5.  
  6. function build_sorter($key) {
  7. return function ($a, $b) use ($key) {
  8. return strnatcmp($a[$key], $b[$key]);
  9. };
  10. }
  11.  
  12. usort($array, build_sorter('key_b'));
  13.  
  14. foreach ($array as $item) {
  15. echo $item['key_a'] . ', ' . $item['key_b'] . "\n";
  16. }
  17. ?>


Wywala błąd linii ( return function ($a, $b) use ($key) {):
Parse error: syntax error, unexpected T_FUNCTION
redeemer
Cytat(harbii @ 23.04.2014, 14:16:13 ) *
Nie czaje tego.
Pierwszy lepszy przykład z manuala. Dlaczego nie działa?

  1. <?php
  2. $array[0] = array('key_a' => 'z', 'key_b' => 'c');
  3. $array[1] = array('key_a' => 'x', 'key_b' => 'b');
  4. $array[2] = array('key_a' => 'y', 'key_b' => 'a');
  5.  
  6. function build_sorter($key) {
  7. return function ($a, $b) use ($key) {
  8. return strnatcmp($a[$key], $b[$key]);
  9. };
  10. }
  11.  
  12. usort($array, build_sorter('key_b'));
  13.  
  14. foreach ($array as $item) {
  15. echo $item['key_a'] . ', ' . $item['key_b'] . "\n";
  16. }
  17. ?>


Wywala błąd linii ( return function ($a, $b) use ($key) {):
Parse error: syntax error, unexpected T_FUNCTION

Masz starą wersję PHP. "Funkcje anonimowe" są dostępne od wersji 5.3.0.
harbii
to jak łatwo i szybko posortować w wersji 5.2.6?

Narazie zrobiłem coś takiego:
  1.  
  2. $sql = "SELECT * FROM tabelka ";
  3. $w = mysql_query($sql);
  4. while($d = mysql_fetch_array($w))
  5. {
  6. $tre[][nr] = $d['nr'];
  7. $tre[][nazwa] = $d['nazwa'];
  8. }
  9. rsort ($tre);
  10. for( $x = 0; $x < count($tre); $x++ ){
  11. echo $tre[$x]['nazwa'];
  12. }

działa ale jak zrobić aby wyświetliło poprawnie nazwę i nr?
bo cos takiego
  1. echo $tre[$x]['nazwa'].$tre[$x]['nr'];

wyświetla głupoty
Turson
Miałeś to poprawić
$tre[][nr]
$tre[][nazwa]

przed for zrób print_r($tre);
harbii
poprawiłem dodałem ale dalej nie wyświetla jak powinno
Turson
Po to napisałem żebyś dodał print_r($tre) żeby wyprintowało tablicę... Wtedy się okaże jaki jest rezultat sortowania
harbii
temat dalej wisi
z printa dostaję
Array ( [0] => Array ( [nr] => 7 ) [1] => Array ( [nazwa] => czarne ) [2] => Array ( [nr] => 2 ) [3] => Array ( [nazwa] => różowe ) [4] => Array ( [nr] => 1 ) [5] => Array ( [nazwa] => plastikowe ) [6] => Array ( [nr] => 0 ) [7] => Array ( [nazwa] => brązowe ) )

Chciałbym aby posortowało się wg 'nr' lub chodziaż wg indexu (ale odwrotnie od ostatniego (7) do pierwszego (0))

Jak tego dokonać?

Znalazłem rozwiązanie takie:

  1. <?php
  2. foreach ($dane as $klucz => $wiersz) {
  3. $numer[$klucz] = $wiersz['numer'];
  4. $edycja[$klucz] = $wiersz['edycja'];
  5. }
  6. array_multisort($numer, SORT_DESC, $edycja, SORT_ASC, $dane);
  7. ?>


Jak macie lepsze to proszę o podanie.
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.