Отобрать элементы многомерного массива по списку ключей

WBS

Новичок
$a - исходный многомерный массив.
$keys - список (массив) допустимых ключей.

Отобрать элементы по первому ключу можно так:
Код:
$b = array_intersect_key($a, array_flip($keys));
По второму так:
Код:
$c = array_map("array_intersect_key", $a, array_fill(0, sizeof($a), array_flip($keys)));
По третьему так:
Код:
$d = array();
foreach ($a as $key => $val)
  $d[$key] = array_map("array_intersect_key", $val, array_fill(0, sizeof($val), array_flip($keys)));
Существует ли более простой способ отобрать элементы многомерного массива по третьему ключу (без перебора элементов массива)?

Есть ли универсальный способ, позволяющий отобрать элементы массива по произвольному ключу $n?

Тестовый код:
Код:
<?

function print_3dim_arr ($arr, $var_name="") {
  $str = "<p>";
  if ($var_name)
    $var_name = "\${$var_name}";
  foreach ($arr as $key1 => $arr1)
    foreach ($arr1 as $key2 => $arr2)
      foreach ($arr2 as $key3 => $val)
        $str .= "{$var_name}[{$key1}][{$key2}][{$key3}] = {$val};<br>";
  print($str);
}

$a = array();
for ($i1=0; $i1<=2; $i1++)
  for ($i2=0; $i2<=2; $i2++)
    for ($i3=0; $i3<=2; $i3++)
      $a[$i1][$i2][$i3] = 0;

$keys = array(1,5);

$b = array_intersect_key($a, array_flip($keys));

$c = array_map("array_intersect_key", $a, array_fill(0, sizeof($a), array_flip($keys)));

$d = array();
foreach ($a as $key => $val)
  $d[$key] = array_map("array_intersect_key", $val, array_fill(0, sizeof($val), array_flip($keys)));

print_3dim_arr($a, "a");
print_3dim_arr($b, "b");
print_3dim_arr($c, "c");
print_3dim_arr($d, "d");

?>
 
Сверху