<?php
$array = array(
array('x' => 1),
array('x' => 2),
array('x' => 3),
array('x' => 4),
array('y' => 5),
array('y' => 6),
array('z' => 7), // Названия ключей не будут влиять на формирование результата ;-)
);
// Определим переменную с финальным результатом
$result = [];
// Прогуляемся по исходному массиву и добавим в результирующий массив
// значения исходного в разбивке по ключам
// * чтобы анонимная (безымянная) ф-ция могла получить доступ к переменной $result,
// добавим ее через слово `use`,
// а чтобы лямбда-функция (это то же, что анонимная) могла и изменять переменную $result,
// предварим ее амперсандом `&` — то есть передадим переменную по ссылке
array_walk($array, function($el) use (&$result) {
// Найдем ключ для каждого элемента исходного массива
$key = array_key_first($el);
// Добавим вложенные значения в разбивке по ключам
$result[$key][] = array_shift($el);
});
print_r($result);