Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zmiana kolejności w tablicy
Forum PHP.pl > Forum > Przedszkole
Lombi
Witam,
Mam taka tablice:
  1. <?php
  2. tab = ('1', '2', '3', '4');
  3. ?>


I chce aby kiedy kod napotka na dana wartość (np.3) zamienił ją miejscami z wartością 2, abym otrzymał:
  1. <?php
  2. tab = ('1', '3', '2', '4');
  3. ?>


Teoretycznie wiem jak to zrobić, ale kurcze praktycznie nie bardzo sad.gif
  1. <?php
  2. foreach ($tab as $n => $res) {
  3. if($n == 3) {
  4. ... nie wiem co dalej...
  5. }
  6. ?>


W sumie tyle smile.gif Z góry dziękuje!
EdeusEx
Chodzi Ci o sortowanie?
Mlodycompany
raczej to sortowanie nie jest bo sortowanie polega na uporzadkowaniu po kolei wedlug jakiegos klucza, a nie na wyrywki, ze 2 zamienia sie z 3 czy jakos inaczej
bmL
  1. <?php
  2. for($i=0; $i < count($tab); $i++)
  3. {
  4. if($tab[$i]=3)
  5. {
  6. $temp = $tab[2];
  7. $tab[2] = $tab[$i];
  8. $tab[$i] = $temp;
  9. //albo
  10. $temp = $tab[$i-1];
  11. $tab[$i-1] = $tab[$i];
  12. $tab[$i] = $temp;
  13. }
  14. }
  15. ?>

Może coś takiego nie wiem do końca jaki jest cel tongue.gif
dr_bonzo
http://www.php.net/uksort
Mlodycompany
dr bonzo: uksort sortuje z tego co pamietam wg kluczu w tablicy, a w tej tablicy tego nie ma, chyba żeby tablica wygladała tak:
  1. <?php
  2. $tablica = array(
  3. '1' => 1,
  4. '2' => 3,
  5. '3' => 2,
  6. '4' => 4,
  7. );
  8. ?>

i wtedy uksort ma sens
Lombi
No proszę jakie zainteresowanie tongue.gif
A poważnie to dziękuje za odpowiedzi panowie. Najbardziej przypadł mi do gusty sposób bmL-a!
Na tej podstawie zrobiłem tak:
  1. <?php
  2. $tab = array('m1', 'm2', 'm3', 'm4');
  3.  
  4. foreach($tab as $n => $res) {
  5. if($res[$n] == 2) {
  6. $temp[$n-1] = $tab[$n];
  7. $temp[$n] = $tab[$n-1];
  8. } else {
  9. $temp[$n] = $tab[$n];
  10. }
  11. }
  12.  
  13. foreach($tab as $res) {
  14. echo $res;
  15. }
  16.  
  17. foreach($temp as $res) {
  18. echo '<br />'.$res;
  19. }
  20. ?>


Działa dobrze ale tylko dla $res[$n] == 2. Dlaczego?
dr_bonzo
@Mlodycompany:
1. jak pisalem posta to nie wiedzialem co on chce osiagnac (w przykladowym kodzie podal porownywanie indeksow tablic
  1. <?php
  2. foreach ($tab as $n => $res) {
  3. if($n == 3) { // ooo, tutaj :)
  4. ... nie wiem co dalej...
  5. }
  6. ?>


to myslalem ze mu o sortowanie wg kluczow chodzi

2.
Cytat
uksort sortuje z tego co pamietam wg kluczu w tablicy, a w tej tablicy tego nie ma

- tak: sortuje po kluczu
- nie: sprawdz sobie print_r( array( 1, 2,3,4 ) ); winksmiley.jpg


@Lombi: co z czym chcesz zamieniac?
2ke z 3ka (element o wartosci 2 z ... 3), czy 3ke z poprzednim elementem, czy 2ke z poprzednim?questionmark.gif
Lombi
Jak zwykle zamotałem! Sytuacja wygląda następująco:
Mama tablice:
  1. <?php
  2. $tab = array('m1', 'm2', 'm3', 'm4');
  3. ?>


Skrypt sprawdza ile jest elementów w tablicy i dla elementu drugiego i kolejnych jest przycisk przesuń w górę. Po naciśnięciu ma zamienić kolejność elementów, nie ich wartość tylko kolejność. Przyjmijmy za klikam w link odpowiedzialny za przesunięcie w górę m2, po wykonaniu skryptu mam otrzymać tablicę z m2 na pierwszej pozycji m1 na drugiej i dalej tak jak było czyli:
  1. <?php
  2. $tab = array('m2', 'm1', 'm3', 'm4');
  3. ?>


Przy tej samej akcji dla m3 mam otrzymać
  1. <?php
  2. $tab = array('m1', 'm3', 'm2', 'm4');
  3. ?>


itd...

Mam nadzieje że zrozumiale napisałem.

// TROCHĘ PÓŹNIEJ
Poradziłem sobie. Jak sie okazało wcześniej w kodzie była literówka smile.gif
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.