Один лайнер:
$keys=array_unique(array_reduce(array_map('array_keys',$data),'array_merge',[]));
Или в функции:
function get_array_children_keys($data) {
return array_unique(
array_reduce(array_map('array_keys', $data), 'array_merge', [])
);
}
Теперь давайте разберем это с примером, вот некоторые примеры данных:
[
['key1' => 0],
['key1' => 0, 'key2' => 0],
['key3' => 0]
]
Начиная с самой внутренней функции, мы запускаем array_map с функцией array_keys:
array_map('array_keys', $data)
Это дает нам ключи от всех дочерних массивов
[
['key1'],
['key1', 'key2'],
['key3']
]
Затем мы запускаем array_reduce для данных с обратным вызовом array_merge и пустым массивом в качестве исходного значения:
array_reduce(..., 'array_merge', []);
Это преобразует наши множественные массивы в 1 плоский массив:
[
'key1',
'key1',
'key2',
'key3'
]
Теперь мы удалим наши дубликаты с помощью array_unique:
array_unique(...)
И в итоге все наши ключи:
[
'key1',
'key2',
'key3'
]