То, что я бы сделал, выглядит примерно так:
$result = array();
foreach ($firstArray as $value)
{
preg_match('/^ing_(\d+)_/', $value, $matches);
$number = $matches[1];
if (!array_key_exists($number, $result))
$result[$number] = array();
$result[$number][] = $value;
}
По сути, вы перебираете свой первый массив, смотрите, какое число там, и помещаете его в нужное место в вашем конечном массиве.*
РЕДАКТИРОВАТЬ .Если вы знаете, что у вас всегда будут цифры, начинающиеся с 1
, вы можете заменить $number = $matches[1];
на $number = $matches[1] - 1;
, таким образом, вы получите точно такой же результат, который вы опубликовали в качестве примера.