Sortowanie tablic wielowymiarowych w PHP


(tomi001) #1

Mam pytanie jak posortować tablicę dwuwymiarową gdzie np. 1 rekordem tablicy jest liczba, a drugim rekordem tablicy jest ciąg znaków np. 3 koza, 5 pies , próbowałem np. funkcje sortującą sortowanie bąbelkowe i użyć funkcji sort() albo ksort(), ale się nie udało.


(pain3hp) #2

to źle spróbowałeś bo ksort wystarczy, jeżeli jest tak jak piszesz, najlepiej podaj var dumpa tej tablicy


(tomi001) #3

To jest tylko fragment tej tablicy nie dałem całej bo by była za duża

array(95) { [0]=> array(1) { [0]=> int(-2) } [1]=> array(2) { [0]=> string(7) “laremid” [1]=> int(-4) } [2]=> array(2) { [1]=> string(5) “nasen” [2]=> int(6) } [3]=> array(2) { [2]=> string(5) “sedam” [3]=> int(-6) } [4]=> array(2) { [3]=> string(9) “thiocodin” [4]=> int(0) } [5]=> array(2) { [4]=> string(7) “alermed” [5]=> int(-1) } [6]=> array(2) { [5]=> string(8) “pramolan” [6]=> int(-7) } [7]=> array(2) { [6]=> string(12) “hydroksyzyna” [7]=> int(-6) } [8]=> array(2) { [7]=> string(9) “trileptal” [8]=> int(-1) } [9]=> array(2) { [8]=> string(6) “acodin” [9]=> int(-3) } [10]=> array(2) { [9]=> string(8) “oxazepam” [10]=> int(-3) } [11]=> array(2) { [10]=> string(8) “signopam” [11]=> int(-4) } [12]=> array(2) { [11]=> string(7) “antidol” [12]=> int(-1) } [13]=> array(2) { [12]=> string(8) “relanium” [13]=> int(-6) } [14]=> array(2) { [13]=> string(9) “ibuprofen” [14]=> int(-5) }


(Konrad Kosowski) #4

Burdel masz w tej tablicy okropny… W pierwszym wierszu tablica, z jednym indeksem (0), potem tablica z dwoma wierszami, indeksy 0 i 1, potem kolejna, z dwoma, indeksy 1 i 2, kolejna i indeksy 2 i 3. Co chcesz w tym posortować?


(tomi001) #5

Liczby chcę posortować.

W taki sposób tworzę tą tablicę

$wez = mysql_query("select distinct nazwa from wez ");

while ($wez2 = mysql_fetch_array($wez) ) {

$s[$i][] = porownaj_ciagi($text,$wez2[0]);

$s[][$i] = $wez2[0];

$i++;

}


(Konrad Kosowski) #6

Dobra… chciałem pisać elaborat, ale to chyba nie ma sensu…

for($i=1;$icount($array);$i++)

(tomi001) #7

(Konrad Kosowski) #8

Dobrze zakładałem…

Jak nie pomogło, skoro posortowało tablicę po liczbie?


(tomi001) #9

Ale ja chce tak żeby w drugim elemencie tablicy po już posortowaniu też był drugi element np. jest pociąg 3 winda 5 to żeby po posortowaniu był winda 5 pociąg 3

A tutaj w tej linijce

Tworzysz jednowymiarową tablicę.

$output[$array[$i][1]] = $array[$i][0];


(Konrad Kosowski) #10

Linux user, cnie?

foreach($output as $klucz = $wartosc) {$wynik[] = array($klucz, $wartosc);





Ale zastanów się, zastanów się dobrze, czy faktycznie potrzebujesz tej dwuwymiarowej tablicy.

(tomi001) #11

By ktoś mi mógł napisać całe rozwiązanie bo dawno nie programowałem, a tablicami wielowymiarowymi się nie zajmowałem, będę bardzo wdzięczny.


(Konrad Kosowski) #12

Założę przez chwilę szaloną teorię, że jesteś w stanie sobie sam poradzić, z pozbawioną cienia znamion przemyślanej pętli while, którą używasz i zrobisz porządek w tej swojej pożal się Boże tablicy. Wtedy by posortować po tym całym $wez2[0] wystarczy to:

for($i=1;$icount($array);$i++)