Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] usunięcie pojedynczego wartości w tablicy
czaro123
post
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 20.01.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
freemp3
post
Post #2





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 18:40