array_intersect - zwraca przecięcie tablic.
array array_intersect ( array $tablica1 , array $tablica2 [, array $ ... ] )
array_intersect() zwraca tablicę zawierającą wszystkie wartości tablicy $tablica1, które istnieją we wszystkich argumentach. Zachowywane są przypisania kluczy.
$tablica1 = array ("a" => "zielony", "czerwony", "niebieski"); $tablica2 = array ("b" => "zielony", "żółty", "czerwony"); $wynik = array_intersect ($tablica1, $tablica2); print_r($wynik);
Otrzymamy:
array (2) a => "zielony" (7) 0 => "czerwony" (8)
Kolejny przykład:
$tablica1 = array(2, 4, 6, 8, 10, 12); $tablica2 = array(1, 2, 3, 4, 5, 6); $wynik = array_intersect ($tablica1, $tablica2); print_r($wynik);
Otrzymamy:
array (3) 0 => 2 1 => 4 2 => 6
Kolejny przykład:
$array1 = array(true,2); $array2 = array(1, 2, 3, 4, 5, 6); var_dump(array_intersect($array1, $array2));
Otrzymamy:
array(2) { [0] => bool(true) [1] => int(2) }
Kolejny przykład zawiera poprawioną funkcję:
$tablica1 = array("a" => "green", "brazowy" => "brown", "c" => "blue", "red"); $tablica2 = array("a" => "GREEN", "BRAZOWY" => "brown", "yellow", "red"); function array_intersect_fixed($array1, $array2) { $result = array(); foreach ($array1 as $val) { if (($key = array_search($val, $array2, TRUE))!==false) { $result[] = $val; unset($array2[$key]); } } return $result; } $c = array_intersect_fixed($tablica1, $tablica2); var_dump($c);
Otrzymamy część wspólną tablic:
array (2) 0 => "brown" (5) 1 => "red" (3)
Kolejny przykład to część wspólna z kilku tablic:
function getIntersect($arrays){ $totalArrays = count($arrays); if($totalArrays >= 2){ $arrayTmp = $arrays[0]; for ($i = 1; $i < $totalArrays; $i++) { $arrayTmp = array_intersect($arrayTmp, $arrays[$i]); } return $arrayTmp; }else{ return FALSE; } }
$arrayTmp[0] = array('0'=>0, '1'=>7, '2'=>5); $arrayTmp[1] = array('0'=>7, '1'=>5, '2'=>0, '3'=>15); $arrayTmp[2] = array('0'=>3, '1'=>0, '2'=>7, '3'=>4); $intersectArray = getIntersect($arrayTmp); print_r($arrayFinal);
Otrzymamy:
Array ( [0] => 0 [1] => 7 )
Totolotek:
function matched_main_numbers($string, $string2) { $arr1 = explode(" ", $string); $arr2 = explode(" ", $string2); $array = array_intersect($arr1, $arr2); $comma_separated = implode($array); $str = $comma_separated; $balls = "$comma_separated"; $matched_balls = chunk_split($balls,2," "); $matched_balls =" $matched_balls"; $number_of_matched_main_balls = strlen($str); $number_of_matched_main_balls = ($number_of_matched_main_balls/2); $numbers = "Wylosowano nowe kule, a wśród nich tylko $number_of_matched_main_balls w zgodzie ze wzorcem."; return $numbers; } $c = matched_main_numbers("04 16 17 20 29", "45 34 04 29 16") ; var_dump($c);
Otrzymamy: "Wylosowano kule w ilości 3 - tylko te pasują do badanego zbioru."
Często w dwóch tablicach przechowujemy dane oraz osobno indeksy. Teraz, by uzyskać na podstawie wybranych indeksów dane z drugiej tablicy, potrzebujemy zrobić to tak:
$vals = array("Niebieska","Zielona","Różowa","Żółta"); $db_field = "0,2,3"; $c = implode(", ", array_flip(array_intersect(array_flip($vals), explode(",", $db_field)))); var_dump($c);
Wynikiem będzie string(29) "Niebieska, Różowa, Żółta" - zgodnie z wybranymi indeksami tabeli.