WBS
Новичок
$a - исходный многомерный массив.
$keys - список (массив) допустимых ключей.
Отобрать элементы по первому ключу можно так:
По второму так:
По третьему так:
Существует ли более простой способ отобрать элементы многомерного массива по третьему ключу (без перебора элементов массива)?
Есть ли универсальный способ, позволяющий отобрать элементы массива по произвольному ключу $n?
Тестовый код:
$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");
?>