Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Porównywanie wielu tablic
Forum PHP.pl > Forum > Przedszkole
marcok
Witam, mam pewnien problem ze stworzeniem skryptu, który dla każdego elementu tablicy zwróci index tablicy w której występuje.


Tablica:

[kolory1]
     [0] => czerwony
     [1] => czarny
     [2] => bialy
     [3] => zielony
[kolory2]
     [0] => zielony
     [1] => niebieski
     [2] => bialy
     [3] => czerwony
[kolory3]
     [0] => bialy
     [1] => czerwony
     [2] => czarny
[kolory4]
     [0] => czerwony

a efekt na ktorym mi zalezy to:

czerwony jest w [kolory1], [kolory2], [kolory3], [kolory4]
czarny jest w [kolory1], [kolory3]
bialy jest w [kolory1], [kolory2], [kolory3]
zielony jest w [kolory1], [kolory2]
niebieski jest w [kolory2]

próbowałem z array_diff i pętlami, ale mi nie wychodzi  wstydnis.gif
erix
Pętla + in_array" title="Zobacz w manualu PHP" target="_manual.
tmka
Spróbuj tak: połącz wszystkie tablice w jedna i przejdź przez nią foreach'em sprawdzając czy dana wartość jest w którejś z tablic funkcją array_search(zwróci ci klucz, jeżeli znajdzie element w danej tablicy).
marcok
niestety dalej nie mam pojęcia jak to zrobić  sciana.gif
sowiq
http://us2.php.net/manual/pl/function.in-array.php
Cytat
Sprawdza czy wartość istnieje w tablicy

bool in_array ( mixed $igła , array $stóg_siana [, bool $ścisłe ] )

Przeszukuje stóg_siana w poszukiwaniu parametru igła i zwraca TRUE jeśli wartość została znaleziona lub FALSE w przeciwnym przypadku.

  1. <?php
  2. $os = array("Mac", "NT", "Irix", "Linux");
  3. if (in_array("Irix", $os)) {
  4.    echo "Znaleziono Irix";
  5. }
  6. if (in_array("mac", $os)) {
  7.    echo "Znaleziono mac";
  8. }
  9. ?>


Czego nie rozumiesz?
erix
...i to w pętle, oczywiście, żeby przeszukać wielowymiarowo [;
marcok
o ile to: (oczywiscie tablica jak w pierwszym poscie)

  1. <?php
  2. $xx = explode('|', 'kolory1|kolory2|kolory3|kolory4');
  3.  
  4. for($i = 0; $i < count($xx); $i++) {
  5. if(in_array("czarny", $xxx[$xx[$i]])) {echo "\"czarny\" Znaleziono w [".$xx[$i]."] ";}
  6. }
  7.  
  8.  
  9.  
  10. //wyswietli "czarny" Znaleziono w [kolory1] "czarny" Znaleziono w [kolory3] 
  11. ?>


rozumiem. To ze zrobieniem tego dla wszystkich elementow juz mam problem  blinksmiley.gif
Wicepsik
Poczytaj o pętli foreach" title="Zobacz w manualu PHP" target="_manual
skowron-line
jeżeli chodzi o przeszukiwanie tablicy wielowymiarowej to warto w komentarzach funkcji in_array poszukać.
in_multi_array
marcok
Jednak to nie było takie trudne tongue.gif dla zainteresowanych kod:

  1. <?php
  2.  
  3. $array = array(
  4. 'kolory1' => array(
  5. 0 => 'czerwony',
  6. 1 => 'czarny',
  7. 2 => 'bialy',
  8. 3 => 'zielony'
  9. ),
  10. 'kolory2' => array(
  11. 0 => 'zielony',
  12. 1 => 'niebieski',
  13. 2 => 'bialy',
  14. 3 => 'czerwony'
  15. ),
  16. 'kolory3' => array(
  17. 0 => 'czarny',
  18. 1 => 'czerwony',
  19. 2 => 'bialy'
  20. ),
  21. 'kolory4' => array(
  22. 0 => 'czerwony',
  23. 1 => 'bialy'
  24. )
  25. );
  26. $all = array();
  27. $name = explode('|', 'kolory1|kolory2|kolory3|kolory4');
  28.  
  29. for($i = 0; $i < count($name); $i++) {
  30.  
  31. for($c = 0; $c < count($array[$name[$i]]); $c++) {
  32. if(!in_array($array[$name[$i]][$c], $all)) 
  33. {
  34. $all[] = $array[$name[$i]][$c];
  35. $all2[] = $array[$name[$i]][$c].' ['.$name[$i].']';
  36. } 
  37.  
  38. else {$all2[array_search($array[$name[$i]][$c],  $all)] .= ' ['.$name[$i].']';}
  39.  
  40. }
  41. echo "\n";
  42. }
  43.  
  44. print_r($all2);
  45. ?>


wynik: 

Array
(
  [0] => czerwony [kolory1] [kolory2] [kolory3] [kolory4]
  [1] => czarny [kolory1] [kolory3]
  [2] => bialy [kolory1] [kolory2] [kolory3] [kolory4]
  [3] => zielony [kolory1] [kolory2]
  [4] => niebieski [kolory2]
)



===

Dziękuję zainteresowanym za pomoc.
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.