Вы можете использовать array_map с нулем в качестве первого аргумента (пример приведен в руководстве), чтобы получить желаемый результат:
<?php
$nums = [0 => 5, 1 => 4];
$cars = [0 => 'BMW', 1 => 'Ferrari'];
var_export(array_map(null, $nums, $cars));
Выход:
array (
0 =>
array (
0 => 5,
1 => 'BMW',
),
1 =>
array (
0 => 4,
1 => 'Ferrari',
),
)
Обратите внимание, что следующий ввод даст тот же результат:
$nums = ['puff' => 5, 'powder' => 4];
$cars = ['powder' => 'BMW', 'puff' => 'Ferrari'];
Порядок, а не ключи определяют пары в результате при использовании array_map, как указано выше.
Чтобы связать по ключу с помощью foreach (порядок примечаний $ cars):
<?php
$nums = [0 => 5, 1 => 4];
$cars = [1 => 'Ferrari', 0 => 'BMW'];
foreach($nums as $k => $num)
$result[] = [$num, $cars[$k]];
var_export($result);
Результаты также в желаемом выходе.