foreach( $arr as $k => $sub_arr ) {
$arr[$k] = array_filter(
$sub_arr,
function($value, $key) use ($foo, $bar) {
return $key === $foo && $value === $bar;
},
ARRAY_FILTER_USE_BOTH
);
// хотя вообще-то именно для этого условия достаточно
$arr[$k] = array_diff_assoc($sub_arr, [$foo => $bar]);
}
Порою хочется узнать кто что-то сделал не так. Или например, начало спора прослушать, попросив об этом умный дом
В реальных задачи сложнее, но я не припомню, чтобы мне при обработке данных когда-либо приходилось прорежать уже созданный массив unset-ами. Всегда разумнее оказывался какой-то другой путь.