Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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. }


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
freemp3
post
Post #3





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.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
czaro123
post
Post #4





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

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


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
)
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Rety.... no to pomysl chwilke.... chccesz miec klucze to zapisuj klucze....

nie: else {$aaviltr[] = $aaa[$o];}
a: else {$aaviltr[$o] = $aaa[$o];}


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
czaro123
post
Post #6





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

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


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





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Dostales juz poprawne rozwiazanie. Po co bawisz sie w kolejne?

Jak skopiowac? Normalnie:
$aaviltr = $aaa;


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
czaro123
post
Post #8





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

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


i już wszystko wiem smile.gif
dziękuję.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 16:13