One simple way to do this while ensuring no duplicate keys, is to concatenate the parent and child keys with a recursive loop:
$array = [
'dataset_1' => [
'some' => '...',
'array' => '...',
],
'dataset_2' => [
'some' => '...',
'thing' => '...',
'else' => '...',
]
];
$flat_array = [];
foreach($array as $dataset => $data){
foreach($data as $index => $value){
$flat_array[$dataset . '_' . $index] = $value;
}
}
var_export($flat_array);
Outputs:
array (
'dataset_1_some' => '...',
'dataset_1_array' => '...',
'dataset_2_some' => '...',
'dataset_2_thing' => '...',
'dataset_2_else' => '...',
)
If your data gets more complex you can apply this same logic inside a recursive function that can handle many nested layers:
$array = [
'dataset_1' => [
'some' => '...',
'array' => '...',
],
'dataset_2' => [
'some' => '...',
'thing' => '...',
'else' => [
'cheese' => [
'ball' => true,
'wheel' => false
],
],
]
];
function array_flatten ($array)
{
$result = [];
foreach($array as $i => $value)
{
if(!is_array($value)){
$result[$i] = $value;
}else{
// pass array $value back to this same function
$sub_result = array_flatten($value);
foreach($sub_result as $subI => $subV)
{
// concatenate this index with each sub-index
// to get result index for each sub-value
$result[$i . '_' . $subI] = $subV;
}
}
}
return $result;
}
var_export(array_flatten($array));
Outputs:
array (
'dataset_1_some' => '...',
'dataset_1_array' => '...',
'dataset_2_some' => '...',
'dataset_2_thing' => '...',
'dataset_2_else_cheese_ball' => true,
'dataset_2_else_cheese_wheel' => false,
)
some) in the array (invalid array...)