Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyszukiwaniu elementow nieparzystych w tablicy
Forum PHP.pl > Forum > PHP
marmal
Mam taka tablice (nie wnikajmy o co w tym chodzi tongue.gif):

Kod
Array ( [0] => Array ( [1] => 1 [2] => 2 [3] => 0 [4] => 2 [5] => 1 [6] => 0) [1] => Array ( [1] => 2 [2] => 1 [3] => 1 [4] => 1 [5] => 1 [6] => 0) [2] => Array ( [1] => 0 [2] => 3 [3] => 1 [4] => 1 [5] => 1 [6] => 1 ) [3] => Array ( [1] => 4 [2] => 2 [3] => 2 [4] => 0 [5] => 1 [6] => 1) )



Chcialbym teraz zrobic cos takiego, ze podtablice (tablice w tej tablicy), w ktorych pod kluczami 1,2,3,4 są liczby nieparzyste zostały usunięte!!

Czyli w wyniku mamy cos takiego:

Kod
Array ([3] => Array ( [1] => 4 [2] => 2 [3] => 2 [4] => 0 [5] => 1 [6] => 1) )


Jak to zrobic??

marmal
hwao
Dałeś nie sformatowana tablice – z takiej bardzo ciężko cos wyczytać, proponuje wklej sformatowana i opisz dokładnie, o co Ci chodzi.

Jeżeli to zwykła tablica i chcesz z nią zrobić to, co napisałeś w opisie tematu to tak:

  1. <?php
  2.  
  3. function szukacz( $array ) {
  4.  $wyniki = array();
  5.  foreach( $array As $k => $int ) {
  6. if( $int % 2 != 0 ) {
  7.  $wyniki[] = $int;
  8. }
  9.  }
  10.  return $wyniki;
  11. }
  12.  
  13. $cos = array( 2, 4, 5 , 5, 43, 34, 42, 21 , 7, 9 ,87 );
  14. print_r( szukacz( $cos ) );
  15.  
  16. ?>
sobstel
@hwao, wydaje mi sie ze o wiele prosciej uzyc to array_filter" title="Zobacz w manualu PHP" target="_manual. w manualu jest nawet przyklad na odfiltrowanie liczb parzystych i nieparzystych!!
marmal
Nie wiem czy jest sens zebym pisal o co chodzi w tej mojej zlozonej tablicy, bo to nie bedzie potrzebne do rozwiazania zadania. No chyba, ze bedziecie bardzo chcieli to napisze tongue.gif

A teraz przyklad:

  1. <?php
  2.  
  3. function nieparzysta($var)
  4. {
  5.  return ($var % 2 == 1);
  6. }
  7.  
  8. function parzysta($var)
  9. {
  10.  return ($var % 2 == 0);
  11. }
  12.  
  13. //nie pisze skad sie wzielo $wynik2
  14. print_r($wynik2);
  15. echo &#092;"<br>===================================================<br>\";
  16. print_r(array_filter($wynik2, &#092;"nieparzysta\"));
  17.  
  18. ?>



Dostaje w wyniku:

Array ( [0] => Array ( [1] => 1 [2] => 2 [3] => 0 [4] => 2 [5] => 1 [6] => 0 [x] => -1 ) [1] => Array ( [1] => 2 [2] => 1 [3] => 1 [4] => 1 [5] => 1 [6] => 0 [x] => 1 ) [2] => Array ( [1] => 0 [2] => 3 [3] => 1 [4] => 1 [5] => 1 [6] => 1 [x] => -1 ) [3] => Array ( [1] => 1 [2] => 2 [3] => 2 [4] => 0 [5] => 1 [6] => 1 [x] => 1 ) )
===================================================
Array ( [0] => Array ( [1] => 1 [2] => 2 [3] => 0 [4] => 2 [5] => 1 [6] => 0 [x] => -1 ) [1] => Array ( [1] => 2 [2] => 1 [3] => 1 [4] => 1 [5] => 1 [6] => 0 [x] => 1 ) [2] => Array ( [1] => 0 [2] => 3 [3] => 1 [4] => 1 [5] => 1 [6] => 1 [x] => -1 ) [3] => Array ( [1] => 1 [2] => 2 [3] => 2 [4] => 0 [5] => 1 [6] => 1 [x] => 1 ) )


Czyli nie dziala, bo na gorze i na dole mam to samo!!
W czym w ogole jest problem - w skład tablicy jak widac wchodza inne tablice, z czym array_filter nie moze sie uporać!!

sad.gif

Macie jakis pomysl co zrobic aby to zadzialalo??

Poza tym to sprawdzanie nieparzystosci ma byc zrobione tylko na wybranych kluczach z tabel a nie na wszyskich...


marmal
vala
tak jak Sopel pisal:


  1. Example 1. array_filter() example
  2. <?php
  3. function odd($var)
  4. {
  5.    return($var % 2 == 1);
  6. }
  7.  
  8. function even($var)
  9. {
  10.    return($var % 2 == 0);
  11. }
  12.  
  13. $array1 = array(&#092;"a\"=>1, \"b\"=>2, \"c\"=>3, \"d\"=>4, \"e\"=>5);
  14. $array2 = array(6, 7, 8, 9, 10, 11, 12);
  15.  
  16. echo &#092;"Odd :n\";
  17. print_r(array_filter($array1, &#092;"odd\"));
  18. echo &#092;"Even:n\";
  19. print_r(array_filter($array2, &#092;"even\"));
  20. ?>


Kod
The above example will output:
Odd :
Array
(
   [a] => 1
   [c] => 3
   [e] => 5
)
Even:
Array
(
   [0] => 6
   [2] => 8
   [4] => 10
   [6] => 12
)

--
Dodałem tag do tablicy. NuLL
sobstel
@marmal, po pierwsze ta tablice wklejaj jako CODE (bbcode) bo jest ciezka w "czytaniu". po drugie, najprawdopodobniej jako argument dodajesz glowna tablice ktora sklada sie z tablic. array_filter musisz wykonac na podtablicy, czyliw twoim przypadku bedzie trzeba zrobic jakis foreach przez tablicę nadrzędną, a w środku foreach wykonywanie array_filter z funkcją 'parzysta' (bo przeciez to nieparzyste chcesz odfiltrowac). co do kluczy 1 do 4 to musisz to do array_filter przekaz tablice bez reszty kluczy (funkcja array_slice($arry, 0, 4) ) (ewentualnie mozna tez skorzytac z funkcji array_walk i juz w funkcji uzytkownika umiescic warunek ze klucz miedzy 1 a 4)

wiem, powyzszy opis nie jest łopatologiczny, ale mam nadzieję ze mimo wsyzstko sobie poradzisz.
marmal
Wykombinowałem w ten sposób tak jak pisal sopel:

  1. <?php
  2.  
  3. function parzysta($var)
  4. {
  5.  return ($var % 2 == 0);
  6. }
  7.  
  8. foreach($wynik3 as $k => $v) {
  9. $przyciete= array_slice ($wynik3[$k], 0, 4);
  10. $wyjscie=array_filter($przyciete, &#092;"parzysta\");
  11. }
  12.  
  13. ?>


Problem teraz mam w tym, ze nie wiem jak to zapisac do nowej tablicy bo wynik:
-ma być w postaci tablicy złożonej
-nie może być już przycięty, bo to przycięcie przez funkcje array_slice mialo być wykonane tylko po to żeby sprawdzić parzystość.


Najlepszy bedzie przykład o co mi chodzi:


NA WEJŚCIU:
Kod
Array ( [0] => Array ( [1] => 2 [2] => 2 [3] => 0 [4] => 2 [5] => 1 [6] => 0 [x] => -1 ) [1] => Array ( [1] => 1 [2] => 2 [3] => 1 [4] => 1 [5] => 2 [6] => 1 [x] => -1 ) [2] => Array ( [1] => 3 [2] => 1 [3] => 1 [4] => 1 [5] => 2 [6] => 1 [x] => 1 ) [3] => Array ( [1] => 2 [2] => 2 [3] => 2 [4] => 0 [5] => 2 [6] => 2 [x] => 1 ) )


NA WYJŚCIU:
Kod
Array ( [0] => Array ( [1] => 2 [2] => 2 [3] => 0 [4] => 2 [5] => 1 [6] => 0 [x] => -1 )[3] => Array ( [1] => 2 [2] => 2 [3] => 2 [4] => 0 [5] => 2 [6] => 2 [x] => 1 ) )


Dziękuję wszystkim za dotychczasową pomoc i proszę o kolejnąexclamation.gif smile.gif


Pozdrawiam

marmal

P.S.Nie wiem o co chodzi Wam z tym formatowaniem. Najpierw dalem wynik w znacznikach code to napisaliscie, ze mam sformatowac. Jak nie dalem, to napisaliscie, ze mam dac w znaczniku code (choc wydaje mi sie, iż bez niego jest bardziej czytelne). Mniejsza z tym...
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.