Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: usuwanie wybranego elementu tablic
Forum PHP.pl > Forum > PHP
selea
tak jak w temacie jak moge usunac wybrany element w tablicy questionmark.gif
Oraz skasowac cala tablice gdy nie ma w niej juz zadnych wierszy ?
Kinool
  1. <?php
  2.  
  3. unset($tablica['wybrany_element']);
  4.  
  5. if (count($tablica)<1) {
  6.  unset($tablica);
  7. }
  8. ?>


ale nie wiem czy jest wikszy sens kasowac tablice jesli jest pusta, jesli chodzi ci o optymalizacje to pusta tablica nie zawiera zbyt wiele zasobow (tak przynajmniej mysle) a usuwanie jeje wymaga wykonania ilus tam operacji
komar07
  1. <?php
  2.  
  3. $wejsciowa_tablica = array('jeden', 'dwa', 'trzy');
  4. $elementy_do_usuniecia = array('dwa');
  5.  
  6. $nowa_tablica_z_usunietymi_elementami = array_diff($wejsciowa_tablica, $elementy_do_usuniecia);
  7.  
  8. //lub jak kolega wyzej ten sposob jest dobry gdy chcesz usunac duzo elementow z ta
  9. licy
  10.  
  11. // usuwanie pustej tablicy
  12. if(!count($wejsciowa_tablica)) {
  13. unset($wejsciowa_tablica);
  14. } 
  15.  
  16.  
  17. ?>


brrr nie nawidze polskich zmiennych
selea
dobra ale jezeli mam
  1. <?php
  2.  
  3. $wejsciowa_tablica = array(array('numer','user', 'co', 'ile') 
  4.  array('numer','user', 'co', 'ile')// to jak skasowac powiedzmy caly ten wiersz questionmark.gif
  5.  array('numer','user', 'co', 'ile')
  6. );
  7. ?>
rogrog
  1. <?php
  2.  
  3. unset( $wejsciowa_tablica[1] );
  4.  
  5. ?>


po prostu musisz znać klucz wartości do skasowania
selea
  1. <?
  2. class zamowienie
  3. {
  4.     var $tablica;
  5.     var $produkt;
  6.     var $x=0;
  7.  
  8.     function dodaj($Id_prod,$nazwa,$znak,$kolor,$cena,$ilosc)
  9.     {        
  10.         $this->produkt = array($this->x,$Id_prod,$nazwa,$znak,$kolor,$cena,$ilosc);    
  11.         $this->tablica[$this->x] = $this->produkt; 
  12.         $this->x++;
  13.     }
  14.     function wyswietl()
  15.     {
  16.         $ile_p = count($this->produkt);
  17.         if($this->x > 0)
  18.         {
  19.             echo &#092;"<form action=index.php?navi=koszyk&usun=1 method=post>\";
  20.             for($i=; $i<$this->x ; $i++)
  21.             {
  22.                 echo '<tr height=20>';
  23.                 $check=$this->tablica[$i][0];
  24.                 echo &#092;"<td><input type=checkbox name=numer value=$check></td>\";
  25.                 for($j=; $j<$ile_p ;$j++)
  26.                 {
  27.                     
  28.                     echo '<td width=50>';
  29.                     echo $this->tablica[$i][$j];
  30.                     echo '</td>';
  31.                 }
  32.                 echo '</tr>';
  33.             }    
  34.             echo &#092;"<tr><td><input type=submit value=usun></td></tr>\";
  35.             echo &#092;"</form>\";
  36.         }
  37.         else 
  38.         {
  39.             echo &#092;"<tr height=20><td width=50>\";
  40.             echo &#092;"brak zamowien\";
  41.             echo &#092;"</td></tr>\";
  42.         }
  43.  
  44.     }
  45.     function usun($numer)
  46.     {
  47.         unset($this->tablica[$numer]);
  48.     }
  49. }
  50. ?>


w taki sposob wywoluje te funkcje

  1. <?php
  2. if(isset($zamowienie))
  3. {
  4.     $a->dodaj($Id_prod,$nazwa,$znak,$kolor,$cena,$ilosc);
  5. }
  6. if(isset($usun))
  7. {
  8.     echo $a->usun($numer);
  9. }
  10.  
  11. $a->wyswietl();
  12.  
  13. ?>


moze mi ktos doradzic dlaczego po skasowaniu odpowiednich komorek w wierszu to te wiersze rowniez nie sa kasowane questionmark.gif a jak mam w petli dopisane cheboxy to one mi zostaja z tymi pustymi wierszami ?

i np jak wrzuce do funkcji usun
  1. <?php
  2. function usun($numer)
  3. {
  4. unset($this->tablica[$numer]);
  5. $this->x--;
  6. }
  7. ?>

to usuwajac przed ostatni wiersz kasuje mi zarowno przedostatni jak i ostatni;/
Yarecki
Przy wyświetlaniu użyj !empty(), lub jeszcze lepiej foreach zamiast for. To powinno zapobiec pojawianiu się pustych wierszy.

$this->x to liczba elementów w tabeli, a nie maksymalny numer indexu, np.:
Jeśli zrobisz tabele
a[0] = 0
a[1] = 1
a[2] = 2
To tutaj liczba elementów wynosi 3, a max. index 2.
Teraz kiedy zrobisz unset a[1], unset a[2] i dodasz nową wartość do a[] to liczba elementów będzie wynosiła 2, a max. index 3.

Dlatego $this->x możesz używać tylko do dowiedzenia się ile elementów jest w zamówieniu, a nie do indexowania tablicy z zamówieniem.

BTW. Zrób sobie eksperyment. Dodaj 3 elementy do zamówienia. Później usuń 2 ostatnie. Dodaj jeden nowy i sprawdź czy przypadkiem nie nadpisało tego wcześniejszego pierwszego.
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.