Notatki PHP

prywatne zapiski na kamieniu

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.