Notatki PHP

prywatne zapiski na kamieniu

 
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