Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] usunięcie pojedynczego wartości w tablicy
Forum PHP.pl > Forum > Przedszkole
czaro123
Witam,
poniżej kod:
  1. function zera($usunzera){
  2. return ($usunzera != 0);
  3. }
  4.  
  5. $aaa = array(6,5,4,0,3,0,5,0,3);
  6. $bbb = array(3,6,3,0,2,0,7,0,1);
  7. $ccc = array(4,7,2,0,1,0,8,0,6);
  8. $policz = count($aaa);
  9.  
  10. $aaviltr = array();
  11. for ($o=0; $o<$policz; $o++){
  12. if ($aaa[$o] == 0 and $bbb[$o] == 0 and $ccc[$o] == 0){
  13. $aaviltr = array_filter($aaa, "zera");
  14. }
  15. else {$aaviltr[] = $aaa[$o];}
  16. }


powyższy skrypt ma za zadanie usunąć z tablicy $aaa wszystkie zera pod warunkiem że przy tym samym kluczu w $bbb i $ccc także są zera. oczywiście ma to zrobić z zachowaniem kluczy pozostałych wartości. wynik jest następujący:
Array
(
[0] => 6
[1] => 5
[2] => 4
[4] => 3
[6] => 5
[8] => 3
[9] => 3
)
czyli wszystko byłoby ok gdyby nie to że powstał klucz [9] z powtórzoną wartością dla klucza [8]. wiem jak ją usunąć ale moje pytanie brzmi: skąd wziął się tam klucz [9] i jak poprawić kod aby w ogóle nie powstawał nowy argument poza tymi z $aaa?
z góry dziękuję za odp.
nospor
Alez trzeba miec fantazje by tak prostą sprawe tak skomplikowac....

  1. $aaviltr = array();
  2. for ($o=0; $o<$policz; $o++){
  3. if ($aaa[$o] == 0 and $bbb[$o] == 0 and $ccc[$o] == 0){
  4. //NIC NIE ROB bo i niby po co??
  5. }
  6.  
  7. else {$aaviltr[] = $aaa[$o];}
  8.  
  9. }
freemp3
Kod, który podałeś niestety nie działa tak jak byś chciał. Funkcja array_filter filtruje całą tablice, a nie, tak jak Ty chcesz, konkretny element. Powinieneś przed pętlą skopiować zawartość tablicy $aaa do zmiennej $aaviltr i w pętli usuwać z niej elementy, które spełniają warunek używając do tego funkcji unset.

Dziewiąty element pojawia się właśnie dlatego, że funkcja array_filter zwraca tablicę $aaa z usuniętymi zerami, którą Ty zapisujesz w zmiennej $aaviltr. Oprócz tego jest jeszcze jedno przejście pętli, które nie wchodzi w warunek z zerami tylko dopisuje ostatni element do tablicy wynikowej. Jeśli poprawisz tak jak napisałem wyżej problem zniknie.
czaro123
dzięki, tyle że w tym momencie tablica $aaviltr gubi klucze. powinno być:
Array
(
[0] => 6
[1] => 5
[2] => 4
[4] => 3
[6] => 5
[8] => 3
)
a jest:
Array
(
[0] => 6
[1] => 5
[2] => 4
[3] => 3
[4] => 5
[5] => 3
)
nospor
Rety.... no to pomysl chwilke.... chccesz miec klucze to zapisuj klucze....

nie: else {$aaviltr[] = $aaa[$o];}
a: else {$aaviltr[$o] = $aaa[$o];}
czaro123
nie za bardzo rozumiem co oznacza "skopiować zawartość tablicy $aaa do zmiennej $aaviltr"
czy mógłbym prosić o info trochę jaśniej?
z góry dziękuję.
nospor
Dostales juz poprawne rozwiazanie. Po co bawisz sie w kolejne?

Jak skopiowac? Normalnie:
$aaviltr = $aaa;
czaro123
i już wszystko wiem smile.gif
dziękuję.
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.