You only need to iterate each top level element, then merge/store the key as an element and the subarray values.
Code: (Demo)
$array = [
'2018-03-12' => [
'United States' => 4,
'Australia' => 15,
'United Kingdom' => 0,
'New Zealand' => 0,
],
'2018-03-13' => [
'United States' => 0,
'Australia' => 8,
'United Kingdom' => 2,
'New Zealand' => 0,
]
];
foreach ($array as $key => $subarray) {
$result[] = array_merge([$key], array_values($subarray));
}
var_export($result);
Output:
array (
0 =>
array (
0 => '2018-03-12',
1 => 4,
2 => 15,
3 => 0,
4 => 0,
),
1 =>
array (
0 => '2018-03-13',
1 => 0,
2 => 8,
3 => 2,
4 => 0,
),
)
Or you can unshift the key into subarray and reindex both levels.
foreach ($array as $key => $subarray) {
array_unshift($subarray, $key);
$result[] = array_values($subarray);
}
Or you can use the Union Operator to merge the key with the subarray elements and then reindex.
foreach ($array as $key => $subarray) {
$result[] = array_values([$key] + $subarray);
}
You can even unpack the subarray into an array_push call if your php version allows variadics.
foreach ($array as $key => $subarray) {
$temp = [];
array_push($temp, $key, ...array_values($subarray));
$result[] = $temp;
}
Or (Demo)
var_export(
array_map(
fn($k) => array_merge([$k], array_values($array[$k])),
array_keys($array)
)
);