function key_values_intersect($values,$keys) { foreach($keys AS $key) { $key_val_int[$key] = $values[$key]; } return $key_val_int; } $big = array("first"=>2,"second"=>7,"third"=>3,"fourth"=>5); $subset = array("first","third"); print_r(key_values_intersect($big,$subset));
Otrzymamy aktywne klucze wykryte na podstawie wybranych łańcuchów z tablicy $subset:
Array ( [first] => 2 [third] => 3 )
Kolejny przykład:
$records = array( array( 'id' => 2135, 'first_name' => 'Jaśko', 'last_name' => 'Pawlak', ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ), array( 'id' => 5342, 'first_name' => 'Kaśka', 'last_name' => 'Pawlaczka', ), array( 'id' => 5623, 'first_name' => 'Jack', 'last_name' => 'September', ) ); $records2 = [ [ 'id' => 2135, 'first_name' => 'John' ], [ 'id' => 3245, 'first_name' => 'Sally' ], [ 'id' => 5342, 'first_name' => 'Jane' ], [ 'id' => 5623, 'first_name' => 'Peter' ], [ 'id' => 6982, 'first_name' => 'Sally' ] ]; function array_intersect_recursive($array1, $array2) { foreach($array1 as $key => $value) { if (!isset($array2[$key])) { unset($array1[$key]); } else { if (is_array($array1[$key])) { $array1[$key] = array_intersect_recursive($array1[$key], $array2[$key]); } elseif ($array2[$key] !== $value) { unset($array1[$key]); } } } return $array1; } $c = array_intersect_recursive($records, $records2); var_dump($c);
Otrzymamy część wspólną tablic, czyli:
array (4) 0 => array (1) id => 2135 1 => array (2) id => 3245 first_name => "Sally" (5) 2 => array (1) id => 5342 3 => array (1) id => 5623