Чтобы использовать функцию PHP array_filter() для фильтрации элементов массива по ключу, а не по значению, можно передать флаг ARRAY_FILTER_USE_KEY в качестве третьего аргумента функции. В этом случае ключ будет передан в качестве единственного аргумента в предоставленную функцию обратного вызова.
Например, для фильтрации числовых индексов в массиве, имеющем как числовые, так и ассоциативные ключи, можно поступить следующим образом:
$arr = [
'foo' => 'bar',
1 => 'baz',
'qux' => 22,
3 => 123,
'quux' => 'quuz',
];
$filteredArr = array_filter(
$arr,
fn ($key) => is_numeric($key),
ARRAY_FILTER_USE_KEY
);
echo print_r($filteredArr, true); // [1 => 'baz', 3 => 123]
Как видно из результата, ключи массива сохраняются (что может привести к появлению пробелов в индексированном массиве, что и произошло в данном примере). Однако можно переиндексировать массив (например, с помощью функции array_values()).